2011-08-25 129 views
1

我一直在這個幾個小時一直在攪亂,並把我的頭髮拉出來。如何從myFunction返回var a以允許將其設置爲var b,然後在警報消息中顯示b的值?謝謝! :)GreaseMonkey:GM_xmlhttpRequest返回值到調用函數

function myFunction(arg) 
{ 
var a; 

GM_xmlhttpRequest({ 
    method:"GET", 
    url:"http://site.com/arg?" + arg, 
    headers:{ 
    "User-Agent":"monkeyagent", 
    "Accept":"text/monkey,text/xml", 
    }, 
    onload:function(details) { 
    a = details.responseText; 


    } 
}); 

return a; 

} 

b = myFunction("blabla"); 
alert(b); 

當我試着它只返回一個空白的消息。

回答

1

您不能像這樣返回a,因爲GM_xmlhttpRequest異步運行。

myFunction返回後,onload函數將會很長時間激活。任何你想用a做的事情都必須從onload函數中調用的函數完成。

Greasemonkey 只是增加了對同步模式的支持,從版本0.9.9開始。如果您需要,您可以下載版本0.9.10,here的預發佈版。

然而,你會聰明的學會如何異步處理這種事情。您將獲得更快,更響應的用戶界面,而不是「掛起」和「凍結」。對於所有現實生活中的編程情況來說,這是一個很好的概念。

+0

那麼如何返回一個在xmlrequest之外使用? –

+0

@龔元程,你會使用像[這個問題](http://stackoverflow.com/q/8778267/331508)代碼 - 除了最後我檢查,Greasemonkey中的錯誤使其無法正常工作。最好不要這樣編碼。 –