我正在使用JS unde Adobe AIR进行一些开发。我想要做的是创建一个远程网站的请求(例如,用于身份验证)。
这个问题与AIR没有关系,这是一个我无法做对的JS事情。我想要做的是检索请求体,但如果我只返回“str”var它显示“未定义”。我试图在函数内部声明它'全局'但它不起作用。我猜我有一些范围问题,我忽略了。
function doRequest(url){
var req = new XMLHttpRequest();
req.onreadystatechange = function(){
if (req.readyState == 4) {
var str = req.responseText;
runtime.trace("deRequest result: " + str);
return str;
}
};
req.open('GET', url, true);
req.send(null);
}
答案 0 :(得分:2)
您不应该尝试捕获onreadystatechange函数的返回值。 XHR是异步的,这意味着只有在请求完成时才会触发此代码。因此,您必须准备好对内部该功能的响应做些什么。最简单的方法是传入一个回调函数。
function doRequest(url, callback_func){
var req = new XMLHttpRequest();
req.onreadystatechange = function(){
if (req.readyState == 4) {
var str = req.responseText;
runtime.trace("deRequest result: " + str);
callback_func(str);
}
};
req.open('GET', url, true);
req.send(null);
}
function callback_func(data) {
// do something with your response data
}
答案 1 :(得分:1)
您将其返回给onreadystatechange
的来电者,这可能不感兴趣。你也不能在doRequest
的末尾返回它,因为它会在调用req.send(null)
之后立即返回,并且该值尚未可用(仍然需要从服务器获得)。一段时间后,您的onreadystatechange
处理程序将被调用,您将拥有该值。在这一点上,将它归还给它是没有用的。
您需要对代码进行结构化,以便代替return str
而不是您要对返回值执行任何操作 - 例如将它存储在某处,使用alert
显示它,将其传递给另一个函数。