2017-09-19 189 views
1

試圖將一個變量作爲參數傳遞給嵌套的Ajax請求的回調時,我面臨着一個奇怪的行爲失去了:變量Ajax請求

$('form').on('submit',function(e){ 
    $.ajaxSetup({ 
     header:$('meta[name="_token"]').attr('content') 
    }) 
    e.preventDefault(e); 
    $.ajax({ 
     type:"POST", 
     url:dest_url, 
     data:$(this).serialize(), 
     dataType: 'json', 
     success: function(data){ 
      if($.isEmptyObject(data.error)){ 
       // performing some actions 
       // at this point, data.id contains my id 

       // We call an other function, 
       // which performs an other ajax request, 
       // with data.id as parameter 

       listRefresh(data.id); 

      }else{ 
       // error message 
      } 
     }, 
     error: function(data){ 
      // error message 
     } 
    }) 
}); 


function listRefresh(id){ 
    console.log(id); // At this point, id contains my id 
    $.ajaxSetup({ 
     header:$('meta[name="_token"]').attr('content') 
    }) 
    var src_url = location.href + '?id='+id; 
    $.ajax({ 
     url: location.href, 
     type: 'GET', 
     cache: false 
    }) 
    .done(function(id) { 
     console.log(id); 

     // At this point the console outputs 
     // all my html code in place of id 

     // I tried to pass data, response, id, but still the same issue 
    }) 
    .fail(function() { 
     //error message 
    }); 
} 

代碼註釋中指出上面說,在listRefresh AJAX進行回調,我的變量似乎disapear和console.log輸出我的整個HTML代碼在控制檯... 我從來沒有見過這樣的事情。你有解釋爲什麼,我怎樣才能將我的id作爲參數傳遞給ajax回調函數?

+0

沒有看到後端代碼,我想你'url:src_url'而不是'url:location.href'。否則,我不確定你的期望是什麼 - 你只是向當前頁面發出GET請求,並將返回的內容轉儲出去,這只是你的HTML。 – Quasdunk

+0

@Quasdunk,謝謝,但這是正常的,我使用src_url下面,但我沒有粘貼我的整個代碼。我的問題解決了! –

回答

2

.done()方法的參數是AJAX調用的響應。如果您的調用返回了一個HTML頁面,則id變量將獲得分配給它的所有html字符串。

爲了保持ID在其可變簡單地使用另一個類似:

.done(function(data) { 
    console.log(data) 
    console.log(id); 
}); 
3

傳遞給函數在done第一個參數是從所述AJAX請求的響應。不要緊,你調用變量,這將傳遞給該函數。

但是,您可以在閉包中捕獲值,只需給它另一個名稱並將其分配給局部變量。這樣的事情:

done(function(response) { 
    var theId = id; 

    // "response" contains the response from the server. 
    // "theId" contains the value of `id` from outside this function. 
}) 
+1

這是正確的答案!此外,我可能是錯的,但你不能只是能夠繼續調用它的ID?在op的代碼中,id不起作用的唯一原因是因爲他實際上用他的ajax響應的值覆蓋了該名稱。 –

+0

@Robbie Milejczak確實,我的問題解決了,你們都是對的,而且我確實在腳本中使用了id,而沒有對它施加影響。 –