![](/img/trans.png)
[英]jquery ajax call success, how do I change a global variable in the wrapper javascript function?
[英]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.