2013-07-25 100 views
0

我想把xhr.responseText放到一个变量中然后提醒它,但是由于一个奇怪的原因我不能这样做。在JavaScript中声明一个临时变量到一个全局变量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); 

感谢任何能够帮助解决此问题的人。你test2的变量之前要提醒

+0

'警报(测试2)'可以'之前作为onreadystatechange'后者是异步的,做你的工作,在处理或使用同步请求运行.. –

+0

嘿亚历克斯K.你能为我提供一个如何将xhr.responseText设置为全局变量的示例?非常感激。谢谢。 – Tom

回答

0

充满内容

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); 
} 
+0

我需要将它作为全局变量存储,因为我需要在脚本的后面部分中使用它。 – Tom

+0

这正是代码正在做什么...你只是不能访问的内容,直到xhr.onreadystatechange已被称为因为它是异步的 – Art

1

你射击的asynchronus请求(因为XMLHttpRequest对象需要一些额外的时间来完成的)。执行处理功能后立即触发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(); 
+0

因此,绝对没有办法使结果成为一个全局变量?我需要将它存储为脚本的另一部分。 – Tom

+0

你可以,但是你应该执行'onreadystatechange'函数中的“另一部分”,因为那时候你会得到responseText。 – mohkhan

+0

@Tom结果仍然存储在全局变量中,只有在您收到响应后它才可用。 – Abhitalks

0

同步呼叫通常不是一个好的做法。 也许jQuery是你可以使用的东西?

例子:

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