我怎样才能从GM_xmlhttprequest返回一个值? [英] How can I return a value from GM_xmlhttprequest?

查看:311
本文介绍了我怎样才能从GM_xmlhttprequest返回一个值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  var infiltrationResult; 

while(thisOption){
var trNode = document.createElement('tr');
var tdNode = document.createElement('td');
var hrefNode = document.createElement('a');

infPlanetID = thisOption.getAttribute('value');

var myURL =http://www.hyperium.com/servlet/Planetinf?securitylevel=90&newinfiltr=New+infiltration&planetid=+ PlanetID +& infplanetid =+ infPlanetID ;

GM_xmlhttpRequest({
method:'GET',
url:myURL,
headers:{
'User-agent':'Mozilla / 4.0 (compatible)Greasemonkey',
'Accept':'application / atom + xml,application / xml,text / xml',
},
onload:function(responseDetails){$ b $如果(responseDetails.responseText.match(/< b>< b>无效顺序< \ / td>< \ tr>< tr>< t>< #AAAA77 face = verdana,arial size = 2>目标行星正在阻挡所有渗透[\s\S]< BR> / im)){
//成功匹配
infiltrationResult ='Invalid Order';
} else {
//匹配失败
infiltrationResult ='渗透成功创建';
}
}
});

当我添加


alert(infiltrationResult);

在分配后,我正确地看到了字符串。



但是,在函数退出后,我尝试了相同的提示,并得到:

  undefined 

任何想法我做错了什么?

解决方案

请求异步运行。这就是为什么函数首先需要一个 onload 回调函数。如果它是同步的,那么 GM_xmlhttpRequest 只会像普通函数那样返回响应细节。



在等待请求返回,调用 GM_xmlhttpRequest 之后的代码继续运行。您的脚本正确地识别出 infiltrationResult 未定义,因为请求尚未完成。



如果您需要做不仅仅是在请求返回时分配变量,然后在 onload 回调中执行。


I have this code here:

var infiltrationResult;

while(thisOption) {
    var trNode = document.createElement('tr');
    var tdNode = document.createElement('td');
    var hrefNode = document.createElement('a');

    infPlanetID = thisOption.getAttribute('value');

  var myURL = "http://www.hyperiums.com/servlet/Planetinf?securitylevel=90&newinfiltr=New+infiltration&planetid=" + PlanetID + "&infplanetid=" + infPlanetID;

    GM_xmlhttpRequest({
        method: 'GET',
        url: myURL,
        headers: {
            'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
            'Accept': 'application/atom+xml,application/xml,text/xml',
        },
        onload: function(responseDetails) {
                if (responseDetails.responseText.match(/<b>Invalid order<\/td><\/tr><tr><td><BR><center><font color=#AAAA77 face=verdana,arial size=2>The target planet is blocking all infiltrations[\s\S]<BR><BR>/im)) {
                    // Successful match
                    infiltrationResult = 'Invalid Order';
                } else {
                    // Match attempt failed
                    infiltrationResult = 'Infiltration Successfully Created';
                }
        }
    });

When I add

alert(infiltrationResult);

right after it is assigned, I correctly see the string.

However, after the function has exited, I have try the same alert and I get:

undefined

Any ideas what I'm doing wrong?

解决方案

The request runs asynchronously. That's why the function takes an onload callback function in the first place. If it were synchronous, then GM_xmlhttpRequest would simply return the response details like an ordinary function.

While waiting for the request to return, the code after the call to GM_xmlhttpRequest continues running. Your script correctly identifies that infiltrationResult is undefined because the request hasn't completed yet.

If you need to do more than just assign the variable when the request comes back, then do that in the onload callback.

这篇关于我怎样才能从GM_xmlhttprequest返回一个值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆