2011-12-25 63 views
0

我試圖存儲返回Ajax調用的結果:VAR y值是在JavaScript中使用,但對於返回的y值結果始終爲0存儲Ajax請求結果到一個Javascript瓦爾

<head>  
$.ajax({ 
     url: 'test2.php', 
     success: function(data) { 
      var yValue= data; // data contains value 1; 
     } 
    }); 

    alert (yValue); 
</head> 

返回的結果總是爲零或爲零,當我嘗試使用警告框檢查數據的值時,它總是1.

即使當我使用數據作爲結果存儲到我的數組「dynamicdata」我已創建,它將返回值爲0或NULL:

var globalData = null; 
$.ajax({ 
    url: 'test2.php', 
    async: false, 
    success: function(data) { 
     globalData = data; 
    } 
}); 

      var j=j+1; 

      var CurrentDate1 = new Date((new Date()).getTime()) 
      var hours=CurrentDate1.getHours() 
      var minutes=CurrentDate1.getMinutes() 
      var seconds=CurrentDate1.getSeconds() 
      if (minutes<=9) minutes="0"+minutes; 
      if (seconds<=9) seconds="0"+seconds; 
      var timer=hours+":"+minutes+":"+seconds+""; 


      // remove the first element 
      dynamicdata.splice(0, 1); 
      // add a new elemez 
      dynamicdata.push([timer, globalData]); 

任何人都可以幫忙嗎?

+2

歡迎來到** async **的美妙世界!你不能那樣做。 – SLaks 2011-12-25 17:08:59

回答

6

我試圖存儲返回阿賈克斯

的結果不要試圖對異步性質AJAX的戰鬥(這是什麼的縮寫的第一個字母表示)。這是一場你會輸的戰鬥。如果你想要做AJAX,你應該停止以順序方式思考和編寫代碼。你應該使用事件。您訂閱事件(例如success回調AJAX調用),並且僅在這些事件中使用結果。

所以你的情況,而不是試圖存儲結果裏面的變量簡單地使用回調比對結果:

$.ajax({ 
    url: 'test2.php', 
    success: function(data) { 
     // Here and only here you can hope to reliably use the results 
     // of an AJAX call 
     alert(data); 
    } 
}); 

對於答案的完整性起見(沒有的東西,你應該永遠做)你然而

var globalData = null; 
$.ajax({ 
    url: 'test2.php', 
    async: false, 
    success: function(data) { 
     globalData = data; 
    } 
}); 
alert(globalData); 

注意,通過這樣做,你不再做AJAX:可以在async標誌設置爲false。該調用不是異步的。這是一個標準的同步調用,會在處理過程中阻止用戶瀏覽器。這完全擊敗了AJAX的全部目的。不要這樣做。

+0

我想使用返回的結果,但不知何故,當我將值推入一個JavaScript數組時,返回的數據是NULL。任何解決他的問題的方法? – user1115461 2011-12-25 17:27:53

+0

@ user1115461,它是空的是正常的。 $ .ajax方法立即返回。成功回調可以在稍後調用。解決方法是推入成功回調中的值:'success:function(data){someGlobalArray.push(data); }' – 2011-12-25 17:32:47

+0

似乎無法將數據存儲到文件中,按照您的方法。返回的數據值是1,但是當您檢查數組內的值時,它的空值; – user1115461 2011-12-25 18:03:18

1

您可以添加到ascync: false Ajax調用:

var yValue; 

$.ajax({ 
    url: 'test2.php', 
    success: function(data) { 
     yValue = data; // data contains value 1; 
    }, 
    async: false 
}); 

alert(yValue); 

這是不推薦的,雖然。您不妨在JavaScript中調用異步調用,您將會使用它很多。如果您對嵌套功能不舒服,請參考以下示例:

$.ajax({ 
    url: 'test2.php', 
    success: onReady 
}); 

function onReady(data) { 
    // this is called when the ajax call is completed. 
    alert(data); 
} 
+0

'yValue'的作用域是包含函數。它不會存在於它之外。異步與否。 – 2011-12-25 17:49:23

+1

@nikc吧,我會更新這個例子 – David 2011-12-25 18:08:29