0

我试图将 xhr.responseText 变成一个变量,然后提醒它,但由于一个奇怪的原因我不能这样做。

test2 = ""
function process(){
    url = "http://www.example.com/example.html"
    var xhr = new XMLHttpRequest();
    xhr.open("GET", url, true);
    xhr.onreadystatechange = function() {
    if (xhr.readyState == 4){
        test2 = xhr.responseText
        }
    }
    xhr.send();
}
process();
alert(test2);

感谢任何可以帮助解决此问题的人。

4

3 回答 3

1

您在 test2 变量填充内容之前发出警报(因为 XMLHTTPRequest 需要一些额外的时间才能完成)

var test2 = "";

function process(callback){
    url = "http://www.example.com/example.html"
    var xhr = new XMLHttpRequest();
    xhr.open("GET", url, true);
    xhr.onreadystatechange = function() 
    {
        if (xhr.readyState == 4)
        {        
            test2 = xhr.responseText;
            callback();
        }
    }
    xhr.send();
}

process(callbackFunction);

function callbackFunction()
{
    alert(test2);
}
于 2013-07-25T12:09:08.330 回答
1

您正在触发异步请求。将alert在 process 函数执行后立即触发。稍后当响应返回时,onreadystatechange被解雇。如果您打算对 AJAX 查询的结果做任何事情,您应该在onreadystatechange. 像这样...

 test2 = ""
function process(){
    url = "http://www.example.com/example.html"
    var xhr = new XMLHttpRequest();
    xhr.open("GET", url, true);
    xhr.onreadystatechange = function() {
    if (xhr.readyState == 4){
        test2 = xhr.responseText
        alert(test2);
        }
    }
    xhr.send();
}
process();
于 2013-07-25T12:09:15.507 回答
0

同步调用通常不是一个好习惯。也许jQuery是你可以使用的东西?

例子:

$.ajax({
  url: "http://www.example.com/example.html",
  success: function(data) {
    // now you can do something with the data
    alert(data);
  }
});
于 2013-07-25T12:44:44.767 回答