2013-07-25 144 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); 
    } 
});