簡體   English   中英

我到底如何編寫一個回調函數來更改jquery的AJAX中的全局變量?

[英]How exactly do I write a callback function to change a global variable inside AJAX for jquery?

好的,所以我環顧了很多答案,但這些答案似乎都對我想要實現的目標沒有幫助。 說我有以下代碼:

var n = 0;
$.ajax({
    ...
    success: function(data){
        n = Math.floor((Math.random()*10) + 1);
        somefunction(n);
    }
});

console.log(n) // n would obviously be 0 again

我通過使用async:false使其同步來完成此操作,但是從我的閱讀中了解,這對用戶體驗不利,因為它在等待結果時凍結了瀏覽器。 在上述情況下,如何精確實現回調函數以允許在ajax調用后修改全局變量n

異步函數在另一個線程(非阻塞)中執行,因此回調將在您的下一條指令之后被調用:

console.log(n);

n在調用回調(成功函數)之后設置,但日志在異步函數完成之前設置。 一個簡單的解決方案是將您的代碼包裝在一個函數中,並在jQuery調用成功函數之后調用它。 請注意,您將不需要引用全局變量,因為它將在jQuery范圍之外設置並且可以由operation_x函數范圍訪問。

var n = 0;
function operation_x(){
    console.log(n); // n is set to random value
}
$.ajax({
    ...
    success: function(data){
        n = Math.floor((Math.random()*10) + 1);
        somefunction(n);
        operation_x();
    }
});
console.log(n); // n is 0

您可以使用JavaScript本地存儲:

 $.ajax({
    ...
    success: function(data){
        n = Math.floor((Math.random()*10) + 1);
        somefunction(n);
localStorage.setItem("n", 100)
    }
});

var n;
if(typeof(Storage) !== "undefined") {
    // Code for localStorage.
    n = localStorage.getItem("lastname");
} else {
    // Sorry! No Web Storage support..
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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