簡體   English   中英

javascript全局變量未在ajax回調中更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM