2011-08-22 84 views
2

我使用以下腳本來強制我的服務器重新緩存一個頁面,但是我想修改它以便它可以POST到很多頁面,但使用相同的成功功能。Jquery:將POST發送到多個頁面

function recache() 
    { 
$.ajax({ 
    type: 'POST', 
    url: '../units_and_evidence/', 
    data: 'cache=yes', 
    success: alert("Reset cache successful") 
    }); 
} 

我該如何提供多個網址到POST使用相同的成功功能?

+0

什麼是你想要的目的。有點透視會幫助..雖然它可能發佈到多個網址使用1 ajax請求 – Baz1nga

+0

我試圖重新緩存多個頁面 –

回答

1

有你,你想jQuery Deferreds

基本上,jQuery 1.5及以上版本中的$ .AJAX函數返回一個延遲對象。

var request1 = $.ajax({...}); 
var request2 = $.ajax({...}); 

$.when(request1, request2).then(function() { 
     // Do something 
}); 

會發生什麼事是,一旦這兩個請求(或在。當()方法的參數的所有項目)被解決(與AJAX爲你自動處理),執行中。那麼()方法的功能。還有更多,你可以在在線教程或API文檔中找到。

+0

但是,多次觸發警報,我想發射的功能,一旦授予所有網址成功發佈至。 –

+0

+1 - 尼斯編輯。 – karim79

+0

非常感謝,對我來說這不是成功=/ –

1

現在試試這個:

// initialize here 
var requestCallback = new MyRequestsCompleted({ 
    numRequest: 3, 
}); 



var urls = ["http://www.test.com/users/", "http://www.example.com/users/", "http://www.test.org/users/"] 

    $.each(urls, function(index, value) { 
     $.ajax({ 
      type: "POST", 
      data: 'cache=yes', 
      url: value + get_back + "", 
      success: requestCallback.requestComplete(true) 
     }); 
    }); 



var MyRequestsCompleted = (function() { 
    var numRequestToComplete, requestsCompleted, callBacks, singleCallBack; 

    return function(options) { 
     if (!options) options = {}; 

     numRequestToComplete = options.numRequest || 0; 
     requestsCompleted = options.requestsCompleted || 0; 
     callBacks = []; 
     var fireCallbacks = function() { 
      alert("Reset cache successful"); 
      for (var i = 0; i < callBacks.length; i++) callBacks[i](); 
     }; 
     if (options.singleCallback) callBacks.push(options.singleCallback); 

     this.addCallbackToQueue = function(isComplete, callback) { 
      if (isComplete) requestsCompleted++; 
      if (callback) callBacks.push(callback); 
      if (requestsCompleted == numRequestToComplete) fireCallbacks(); 
     }; 
     this.requestComplete = function(isComplete) { 
      if (isComplete) requestsCompleted++; 
      if (requestsCompleted == numRequestToComplete) fireCallbacks(); 
     }; 
     this.setCallback = function(callback) { 
      callBacks.push(callBack); 
     }; 
    }; 
}); 

,我們在這裏列出所有你要張貼到JavaScript數組中的URL,然後使用jQuery的$。每次遍歷所有的URL,做一個AJAX POST到每個一。

希望這會有所幫助。

+0

問題在於每個人都會觸發成功功能,那就像200個警報,我只是想在最後說出一個警報,說明他們是否失敗。 –

+0

請參閱最新的答案。 – AlphaMale

+0

告訴你是否還有其他問題。 – AlphaMale

0

不確定這是你的想法,但你可以傳遞一個字符串集合到函數,其中每個字符串是你想調用的頁面的URL。

function recache(pages) 
{ 
    $(pages).each(function(){ 
     $.ajax({ 
     type: 'POST', 
     url: this, 
     data: 'cache=yes', 
     success: alert("Reset cache successful") 
     }); 
     }); 
} 
0

這裏是爲了做到這一點1路..你需要火多個Ajax請求到服務器這是肯定的,但你可以添加一個ajaxComplete聽衆中,你基本上計算已完成Ajax請求的數量成功並且當該號碼與請求的總數相匹配時執行您的必要操作。

0

這是一個簡單的例子。使用開關盒。

ajaxSuccess: function(data) { 
         switch (SetUrls.ajaxCallMode) { 
          case 0: 
           "Ur Url" 
           break; 
          case 1: 
           "Ur url" 

           break; 
          case 2: 
           "ur url" 
           break; 
         } 
        }, 
0
function recache(pages) 
{ 
    var numComplete = 0; 
    $(pages).each(function(){ 
     $.ajax({ 
     type: 'POST', 
     url: this, 
     data: 'cache=yes', 
     success: function() { 
      numComplete++; 
      if (numComplete == pages.length) { 
       alert("Success"); 
      } 
     } 
     }); 
    }); 
} 
相關問題