我想:如何保存responseText從GM_xmlhttpRequest中返回?
GM_xmlhttpRequest({
method: "GET",
url: "...",
onload: function(response) {
r = response.responseText;
}});
alert(r); //undefined
如何做到這一點?
我想:如何保存responseText從GM_xmlhttpRequest中返回?
GM_xmlhttpRequest({
method: "GET",
url: "...",
onload: function(response) {
r = response.responseText;
}});
alert(r); //undefined
如何做到這一點?
爲什麼發生這種情況
默認情況下,使用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?
重複的[的GreaseMonkey:GM_xmlhttpRequest返回值來調用函數(http://stackoverflow.com /問題/ 7196772/Greasemonkey的GM-XMLHttpRequest的返回值到調用函數) –