2013-03-16 51 views
0

有沒有辦法在$ .post的成功回調中再次獲得$ .post。如果第一個$ post不成功,我會要求提示。如果證實,它調用執行另一個$。員額再次

我的代碼如下

postvars = { 
       order_no:order_no, 
       tracking_no:tracking_no, 
       continue_submit: false 
      }; 

url = '../shipment/shipment_submit_order_status_ajax'; 

    $.post(url, postvars, function(data1) { 
     if(data1.status == "success") 
     { 
      alert("Order submitted 1"); 
     } 
     else if(data1.status != "success") 
     { 
      var r = confirm("The Order is NOT ready to be shipped. Please check the order again. Are you sure you want to continue to ship this?"); 
      if(r) 
      { 
       //Submit order 
       postvars = { 
        order_no:order_no, 
        tracking_no:tracking_no, 
        continue_submit: true 
       }; 

       url = '../shipment/shipment_submit_order_status_ajax'; 

       $.post(url, postvars, function(data) { 
        if(data.status == "success") 
        { 
         alert("Order submitted 2"); 
        } 
       }, 'json'); 
      } 
     } 

    }, 'json'); 

正在執行兩次調用,而不是提示確認執行第二AJAX調用之前,第一個對話框。任何人都有解決辦法?由於事先

+0

,而不是警告你的調試數據,你可以使用的console.log(「這是我的調試字符串」),並查看瀏覽器控制檯這個數據( cmd + j在mac上) – kirugan 2013-03-16 04:33:19

+0

正在發出第二個AJAX調用_before_確認?這沒有意義。嘗試在調試器中使用斷點;無論你的問題是什麼,你都應該目睹這是以正確的順序執行的。 – 2013-03-16 04:37:23

+0

@edelweiss我試過你的代碼,按預期工作,確認對話框來。你可以寫下接受postvars的服務器方法嗎? – serefbilge 2013-05-19 19:45:51

回答

-2

代替 '如果(r)的' 使用 '如果(真=== R)'

由於在javascript '如果(R)' 是指該變量爲 'r' 是否被定義。在這種情況下,這個變量'r'被定義,因此'if'部分被滿足。

+0

爲什麼倒票?我應該爲這個小問題創建一個小提琴。現在這會過度,當然? – luckystars 2013-03-16 04:28:18

+1

如果(r)是一個真實性測試,而不是變量是否被定義的測試。如果確認框被取消,它將不會被滿足。 – 2013-03-16 04:29:12

+0

@布拉德科赫,你是對的。 :( – luckystars 2013-03-16 04:31:34

2

我建議你使用jQuery的遞延對象:

function ajaxMe(data){ 
    var df = $.Deferred(); 
    $.post('my_const_url', data, function(resp){ 
     if(resp.status !== 'success'){ 
      df.resolve(other_data); 
     }else{ 
      df.reject(other.data); 
     } 
    }, 'json'); 
    return df.promise(); 
} 

ajaxMe(postvars).done(function(response_data){ 
    ajaxMe(whatever_you_want); 
}).fail(function(){ 
    var r = confirm("Do you really want it ?"); 
    if(r){ 
     ajaxMe(some_data); 
    } 
});