2011-08-27 124 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?

相关问题