[英]javascript global variable not updating in ajax callback
在警報時,它總是提醒jojo
。 test2.php
有文本Loco
div 更新為Loco
但全局變量沒有改變。 我試過window.temp = data
但它沒有用。
如何獲取變量中的返回值? 請指導...
<div>
yolo
</div>
<script type="text/javascript">
var temp = 'jojo';
$.ajax({
url: 'test2.php', //Loco
success: function(data)
{
temp = data;
$('div').html(data);
},
error: function (err)
{
alert('error');
}
});
alert(temp);
var toBeUsedLater = temp; //updated temp value from ajax call
refreshTab();
</script>
這是一個異步函數。 (這就是 AJAX 中的A代表的含義。)您正在立即提醒temp
的值,因此它發生在異步調用完成之前。 如果添加
alert(temp);
在success
處理程序結束時,您將看到值已更新。
1)將var temp = 'jojo'
更改為 'temp = 'jojo'
因為這不受執行上下文的限制,也不限於文件(有優點和缺點 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var
2)問題是在回調之前調用了alert。 將警報移動到函數中。 由於 ajax 是異步調用的,這意味着調用成功和錯誤函數,只有當 ajax 從服務器獲取響應時,才會立即調用您現在擁有的警報。
http://javascript.about.com/od/ajax/a/ajaxasyn.htm
$.ajax({
url: 'test2.php', //Loco
success: function(data)
{
temp = data;
$('div').html(data);
alert(temp).
},
error: function (err)
{
alert('error');
}
});
3) 或者,您可以將 ajax 的 async 設置為 false: jQuery.ajax() 中的“async: false”有什么作用? 這將導致 Ajax 調用將在下一行代碼之前完成,但強烈建議不要這樣做。
AJAX - asynchronous
意味着您不會等待響應的到來,Javascript 是解釋性語言,一行一行地執行。 所以這里首先執行alert(temp)
,然后是成功回調,因為它需要一些時間來獲得響應。
只需在您的 ajax 選項中添加async: false
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.