簡體   English   中英

如何將參數傳遞給Ajax回調函數

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

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