2016-10-19 38 views
1

我讀的鏈接https://api.jquery.com/deferred.done/Deferred.done不執行環連接的過程

然後修改我的代碼:如下

$.ajax(
     { 
      type: 'Get', 
      dataType: 'json', 
      data: { id: id }, 
      url: '@Url.Action("GetInsuranceClaim","Insurance")', 
      success: function (da) { 
       if (da.Message == "Success") { 
        var d = $.Deferred(); 
        d.done($('#Cust_id').val(da.Result[0].customer_id), GetPolicy(), $('#policy_no').val(da.Result[0].policy_detail_id), console.log(da.Result[0].policy_detail_id)); 

d.done($( '#CUST_ID')VAL( console.log(da.Result [0] .policy_detail_id),() );

getPolicy方法()是AJAX調用我的問題是Ajax調用最後執行,

我需要執行順序

  1. $( '#CUST_ID')。VAL(da.Result [0 ] .customer_id)
  2. getPolicy方法()
  3. $( '#policy_no')。VAL(da.Result [0] .policy_detail_id)

回答

1

請嘗試下面的代碼片段 - 注意在AJAX調用中使用return,使用它非常重要,因此您可以鏈接延遲。

注意: AJAX調用也被延期!

$.GetInsuranceClaim = function(){ 
    return $.ajax({ 
       type: 'Get', 
       dataType: 'json', 
       data: { id: id }, 
       url: '@Url.Action("GetInsuranceClaim","Insurance")', 
}); 

$.GetPolicy = function(){ 
    //AJAX call - basically the same as the above (don't forget return) 
}); 

$.GetInsuranceClaim().done(function(){ 
    $.GetPolicy().done(function(policyResponse){ 
      ///logic you want to do with this response 
    })); 
})); 
+1

謝謝它的作品 –

0

Deferred.done()的參數需要是函數。您當前的代碼立即執行三個組件,並將三個結果提供給done()方法。

你應該將每個參數包裝在函數(){}中。然後done將按順序調用每個函數。

看起來,GetPolicy()最後執行。現實情況是,它被稱爲第二個(在調用done()之前),它只是完成了最後一次,因爲它是異步的並且很長。