Jquery:将POST发送到多个页面

时间:2011-08-22 09:47:21

标签: jquery

我使用以下脚本强制我的服务器重新缓存页面,但是我想修改它以便它可以POST到许多页面但使用相同的成功函数。

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

如何使用相同的成功函数为POST提供多个网址?

6 个答案:

答案 0 :(得分:1)

有你,你想要jQuery Deferreds

基本上,jQuery 1.5及更高版本中的$ .AJAX函数返回一个延迟对象。

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

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

一旦两个请求(或.when()方法参数中的所有项)都被解析(自动为AJAX处理),会发生.then()方法中的函数。您可以在在线教程或API文档中找到更多内容。

答案 1 :(得分: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的$ .each循环遍历所有网址,并为每个网址进行AJAX POST。

希望这有帮助。

答案 2 :(得分:0)

不确定这是您的想法,但您可以将一组字符串传递给函数,其中每个字符串都是您要调用的页面的URL。

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

答案 3 :(得分:0)

这里有一种方法可以执行此操作..您需要向服务器发出多个ajax请求,但是您可以添加ajaxComplete侦听器,其中您基本上计算已完成的ajax请求的数量成功,当该数字与请求总数相匹配时,执行必要的操作。

答案 4 :(得分:0)

这是一个简单的例子。使用开关盒。

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

                                break;
                            case 2:
                               "ur url"
                                break;
                        }
                    },

答案 5 :(得分: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");
            }
        }
        });
    });
}