如何保存responseText从GM_xmlhttpRequest返回?

时间:2011-08-27 21:39:15

标签: greasemonkey

我试过了:

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

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

这是怎么做到的?

1 个答案:

答案 0 :(得分:1)

为什么会这样?

默认情况下,使用XMLHTTPRequest的ajax请求是异步的。这意味着对方法的调用立即返回,并且当请求在后台进行时主执行继续。请求完成后,将使用请求的结果调用回调方法。因此,在(异步)请求完成之前执行警报。

解决方案1:回调

您没有提供有关为什么需要同步响应文本的上下文,因此您可以重写代码以使用回调并继续使用异步行为 - 这通常是一种很好的做法。

解决方案2:强制同步请求

但是,如果发现您绝对必须同步发出请求,您会发现可以请求同步进行ajax请求。使用Greasemonkey,您应该在调用synchronous: true时使用GM_xmlhttpRequest选项,documented here。请注意,文档说明

  

注意:整个Firefox UI将被锁定并冻结,直到请求完成。在此模式下,返回值中将提供更多数据。

使用浏览器中的XHR对象,您可以通过passing false as the second parameter to XMLHTTPRequest#open获得相同的结果。

如果你正在使用旧版本的Greasemonkey,那么这个SO问题的答案可能会有用:How to make synchronous AJAX calls in greasemonkey?