2012-06-14 76 views
4

實際上,我正在調用多個Ajax調用,但我想要一些Ajax調用先完成並執行定義在其stop函數中的atsk 。但一些Ajax調用應進行一次停止方法定義的函數執行和那些Ajax調用不應再次如何使一個Ajax調用完成後的其他ajax調用和第二個Ajax調用不應該調用.stop函數

$('.badgeContainer').ajaxStop(function() 
    { 

      alert("ajax rqst completed"); 
    }); 

$.ajax({ 

type: "POST", 

      url: "WebServices/abc.asmx/dosomething", 
     data: "{ }", 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function(serviceReply) { 
          var serviceReplyArray = serviceReply.d.split("#"); 

        }, 
        error: function(xhr, errDesc, exception) { 
                    } 
       }); 

另一個Ajax調用這裏cal.stop方法,但不應該叫.ajaxstop這次

我以這種方式提出了我的問題:

假設有兩個Ajax調用web服務。當一個ajax調用完成依賴於ajax調用的函數時,應該在等待第二個jax調用執行之前執行。對於eaxample:一個ajax調用創建圖表和其他ajax調用記錄用戶activities.if顯示chaet的函數依賴於創建圖表使功能得到調用AAX呼叫日誌activities.no等待ajajx呼籲用戶活動

+0

哪裏是ajax調用的代碼? –

+0

不確定你的確切含義,但我想你想要一個回調函數來觸發第二次調用,當第一個Ajax調用完成時,定義全局變量 – hackartist

+0

。在ajax調用完成時設置它。在開始下一個ajax調用之前,檢查全局變量並根據您的條件創建/跳過ajax調用。 –

回答

4

我想你想設置前執行:

async: false 

默認情況下,所有的請求都異步發送。如果您需要同步請求,請將此選項設置爲false。請注意,同步請求可能會暫時鎖定瀏覽器,並在請求處於活動狀態時禁用任何操作。
另請參閱這個老問題。
How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?

+0

當所有的jaax請求都完成時,ajaxstop方法會自動觸發,但是我希望當某些ajax請求完成並且剩下一些請求時,它應該被觸發。那些離開ajax調用不應該觸發ajaxstop方法。我想要同步ajax調用..我只是想在ajax方法中定義的函數在進行其他ajax調用之前先執行。我的代碼發生了什麼事,它執行所有的ajax請求完成時的一切 – user1403235

+0

我可以綁定一個ajax調用與一個特定的選擇器和其他阿賈克斯調用與其他選擇器 – user1403235

+0

我認爲這是不可能的:) –

0

在jQuery 1.8,採用異步的:與jqXHR($ .Deferred)假是 過時;您必須使用完整/成功/錯誤回調。

http://api.jquery.com/jQuery.ajax/(異步部分)

我發現這是一個有點討厭......開發商應給予選擇,以與async: false阻塞調用如果事情的平臺讓 - 爲什麼要限制呢?我只是設置一個暫停,以儘量減少掛起的影響。

儘管如此,我現在在1.8中使用了一個非阻塞隊列,並且工作得非常好。 Sebastien Roch創建了一個易於使用的實用程序,允許您對函數進行排隊並運行/暫停它們。 https://github.com/sebastien-roch/Jquery-Async-queue

queue = new $.AsyncQueue(); 
    queue.add(function (queue) { ajaxCall1(queue); }); 
    queue.add(function (queue) { ajaxCall2(queue); }); 
    queue.add(function() { ajaxCall3() }); 
    queue.run(); 

在第2個功能我通過queue對象到調用,這裏的電話會是什麼樣子:

function ajaxCall1(queue) { 
    queue.pause(); 
    $.ajax({ 
     // your parameters .... 
     complete: function() { 
     // your completing steps 
     queue.run(); 
     } 
    }); 
} 

// similar for ajaxCall2 

通知的queue.pause();在每個函數的開始,queue.run()到請在您的complete聲明末尾繼續排隊執行。

相關問題