在每个人都找到它之前,或多或少曾经问过这个问题: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)*/
}
为了让上述内容按预期工作,我需要编写什么神奇的代码?
答案 0 :(得分:0)
GM_xmlhttpRequest()
以异步方式运行。这意味着onload
在console.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.
}
} );
}
这可能需要改变您对某些操作的看法,但这是值得的。