[英]Howto pass parameter to ajax callback function
function f(id) {
$.ajax("http://example.com/example",{
success:function(data, textStatus, jqXHR){
$("#"+id).text(data);
}
});
}
成功的回調函數可以很好地到達並讀取id
變量,但是由於ajax調用是非阻塞的,因此id
不會隨另一個函數f()
調用而發生變化,它在啟動ajax請求之后但在獲得響應之前發生了嗎? 如何在請求ajax調用時保存並傳遞id
?
不會通過另一個函數f()調用來更改ID
不,因為每次調用一個函數時,都會創建作為參數傳遞的變量的副本。
請考慮以下情況:
let a = 1; function change(param) { param = 2; console.log(param); } change(a); console.log(a);
這段代碼將打印2
,然后1
,因為param
是副本a
,因此改變它不會影響a
。
將引用傳遞給對象時,事情變得有些復雜:
let a = {field: 1}; function change(param) { param.field = 2; // changes the original object field param = {field: 7}; // changes the value of param variable console.log(param.field); } change(a); console.log(a.field);
控制台將打印7
,然后打印2
。 在這種情況下, a
是參考,而不是原始值。 雖然param
是副本a
,它是引用的副本,而這個副本指的是同一個對象。
因此param.field = 2
更改原始對象的field
。 這就是為什么我們在第二個輸出中得到2
的原因。
但是,如果我們給param
了一個新值,我們a
用對新對象{field: 7}
的引用覆蓋對a
的引用。 而且,由於param
是副本a
,原來的對象不會受到影響。
不,它不會改變。 它將使用自己的成功回調來啟動整個新的ajax
請求。 最有可能在第一個更新它之后的某個時間解決它。 即使在服務器返回響應之前再次調用f()
,也是如此。 您的范圍將被保留。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.