我想:如何保存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的返回值到调用函数) –