2014-03-04 37 views
0

我有了運行一個AJAX命令幾次頁面。它必須使用之前的ajax調用的結果來獲取當前的結果。jQuery的多個Ajax調用,而不使用非同步虛假

在外行的話來說:

調用AJAX,建立遠程服務器,返回結果(我得到一個專有ID作爲結果) 對實體...

AJAX調用,使用結果後附加數據遠程服務器,獲取ID這篇文章 的...

調用AJAX,張貼ids..etc

我的第一個想法是異步:假的,但我認爲這是不能接受的廣泛和它破壞代碼執行或DER。我的目標也是有一個對話框窗口,當它們發生時打印ajax調用的結果。目前,一旦所有ajax調用完成,對話窗口就會出現。我沒有得到漂亮的小:建立....完成再額外選項.....做等等...

如果我非同步:真的,我不會有ID的需要來處理接下來的AJAX ..

我有有什麼其他選擇?

//form var is set earlier, standard serialized form. 

    var functions = ['build','additionalOptions','completion']; 

$('#submitButton').click(function(){ 

    $('#createGroupDialog').dialog({ 
     autoOpen:false, 
     width: 1200, 
     height:800, 

     modal: true, 
     position: {my: "top", at: "top"}, 
     resizable: false, 
     closeOnEscape: true 
     }); 

    $("#createGroupDialog").dialog('open').html("<p>Please Wait...</p>"); 

    function fireAjax(form,func) 
    { 
     $.ajax({ 
      type: "POST", 
      url: "createGroup/createGroupDo.php", 
      data: form+"&func="+func, 
      asynch: false, 
      success: function (result) { 
          $('#createGroupDialog').append(result); 
      } 
      }); 
    } 

    jQuery.each(functions , function(i,func){ 
      fireAjax(form,func); 
    }); 

}); 
+0

看看'.promise()'對象。我認爲他們應該完成你正在尋找的東西... – War10ck

回答

0

asynch:false確實是一種處理異步數據的可怕方法。它不惹的執行順序,但它直到請求結束意味着沒有其他JavaScript可以在平均時間運行,這包括像onclick處理程序和動畫。

由於您的要求依賴於以前的要求,你必須把它們寫這樣的:

$.ajax({ 
    url: "request1.php", 
    data: data, 
    success: function (result_1) { 
     $.ajax({ 
      url: "request2.php", 
      data: result_1, 
      success: function (result_2) { 
       $.ajax({ 
        url: "request3.php", 
        data: result_2, 
        success: function() {} 
       }); 
      }); 
     }); 
    } 
}); 

但正如你可以看到這個變得繁瑣。您可以使用回調,但最好使用Promise API。

使用像:

$.ajax({ 
    url: "request1.php", 
    data: data 
}).then(function (result_1) { 
    alert(result_1); 
    return $.ajax({ 
     url: "request2.php", 
     data: result_1, 
    }); 
}).then(function (result_2) { 
    alert(result_2); 
    return $.ajax({ 
     url: "request3.php", 
     data: result_2 
    }); 
}).then(function (result_3) { 
    alert(result_3); 
}); 

值得一提的是,jQuery的做了很多工作的引擎蓋下,使這個API可能。 $.ajax是一個非常靈活的功能。這意味着你可以用很多方式使用它。最好選擇一種方式並堅持下去。目前的藝術狀態真的傾向於承諾。

+0

我不喜歡它,但它的工作:) – bart2puck