GreaseMonkey和JQuery AJAX响应无法以任何形式存在回调

时间:2012-06-25 02:46:10

标签: javascript jquery ajax greasemonkey

在每个人都找到它之前,或多或少曾经问过这个问题:Load remote URL with Greasemonkey and jQuery

然而,这是3年前。我尝试了答案中提出的各种方法,但都没有。

基本上,我的问题是这样的:我正在写一个关于脚本的油脂单脚本,应该是A)在页面上抓取一个链接,B)请求链接链接到的页面(它在同一个页面上)主持人)和C)在该页面上找到某个值。我正在使用jQuery 1.7.2和最新版本的Greasemonkey来尝试实现这一目标。

问题是虽然我可以成功请求页面,但我无法对响应做任何事情。我已经尝试将响应分配给回调之外的变量,但它最终为空。我已经尝试将响应html附加到我在页面上插入的div,但在div上使用console.log显示它是空的(即使firebug实际上显示了html)。就像回调结束一样,检索到的html不仅不存在,而且根本不存在。

所以基本上,我想问一下如何检索html,以便在请求完成后我可以实际使用它。这就是我现在所拥有的(我删除了上述尝试将响应附加到页面上的div):

function getLink(url){
    var resp;
    GM_xmlhttpRequest({
        method: 'GET',
        url: url,
        onload: function(response){
            resp = response.responseText;
        }
    });
    console.log(resp) //nothing here...

    //failed code :(
    /*$.ajax(url, {success: function(data){resp = data})
    console.log(data)*/
}

为了让上述内容按预期工作,我需要编写什么神奇的代码?

1 个答案:

答案 0 :(得分:0)

默认情况下,

GM_xmlhttpRequest()以异步方式运行。这意味着onloadconsole.log(resp) //nothing here...行之后很久就会触发。

虽然GM_xmlhttpRequest() now takes a synchronous: true参数,it is very buggy,我建议暂时不要尝试使用它。

正确的做事方式(以及更好的编程和UI实践)将所有内容放在onload处理程序中:

function getLink (url) {
    GM_xmlhttpRequest ( {
        method: 'GET',
        url: url,
        onload: function (response) {
            var resp = response.responseText;
            console.log (resp);

            // DO EVERYTHING THAT REQUIRES resp HERE.
        }
    } );
}

这可能需要改变您对某些操作的看法,但这是值得的。