2011-08-27 73 views
0

我想:如何保存responseText從GM_xmlhttpRequest中返回?

GM_xmlhttpRequest({ 
    method: "GET", 
    url: "...", 
    onload: function(response) { 
     r = response.responseText; 

    }}); 
alert(r); //undefined 

如何做到這一點?

+0

重複的[的GreaseMonkey:GM_xmlhttpRequest返回值來調用函數(http://stackoverflow.com /問題/ 7196772/Greasemonkey的GM-XMLHttpRequest的返回值到調用函數) –

回答

1

爲什麼發生這種情況

默認情況下,使用XMLHttpRequest來Ajax請求是異步的。這意味着對方法的調用會立即返回,並且在請求在後臺繼續進行時主執行會繼續。當請求完成時,將使用請求的結果調用回調方法。因此,您的警報在(異步)請求完成之前執行。

解決方案1:回調

您沒有提供上下文,爲什麼你需要響應文本同步因此有可能,你可以重寫你的代碼來使用回調並繼續使用異步行爲 - 這通常是很好的做法。

解決方案2:強制同步請求

但是,如果發現你絕對必須的要求同步,你會發現,你可以請求Ajax請求是同步的。使用Greasemonkey時,您應在調用GM_xmlhttpRequest時使用選項synchronous: true,如documented here。請注意,文檔說

請注意:整個Firefox用戶界面將被鎖定並凍結,直到請求完成。在這種模式下,更多的數據將在返回值中可用。

對於瀏覽器中的XHR對象,您可以通過passing false as the second parameter to XMLHTTPRequest#open獲得相同的結果。

如果你正在使用舊版本的Greasemonkey的工作,在回答這個問題的SO可能證明是有用的:How to make synchronous AJAX calls in greasemonkey?

相關問題