在javascript responseText中将临时变量声明为全局变量

时间:2013-07-25 12:06:17

标签: javascript variables

我正在尝试将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);

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

3 个答案:

答案 0 :(得分:1)

您正在触发异步请求。执行过程功能后,将立即触发alert。稍后当响应返回时,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();

答案 1 :(得分:0)

你在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);
}

答案 2 :(得分:0)

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

示例:

$.ajax({
  url: "http://www.example.com/example.html",
  success: function(data) {
    // now you can do something with the data
    alert(data);
  }
});