我使用以下脚本强制我的服务器重新缓存页面,但是我想修改它以便它可以POST到许多页面但使用相同的成功函数。
function recache()
{
$.ajax({
type: 'POST',
url: '../units_and_evidence/',
data: 'cache=yes',
success: alert("Reset cache successful")
});
}
如何使用相同的成功函数为POST提供多个网址?
答案 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");
}
}
});
});
}