我有两个jQuery函数。这两个函数都调用了jQuery ajax
两者都有属性async:false
在我根据某些ajax响应条件重定向的函数中
在第一个函数成功时,我调用另一个函数,然后重定向到另一个页面。但我的第一个功能是不重定向,因为我的第二个功能是没有等待第一个功能的响应
从我的问题中可以清楚地看出希望问题。
我的第一个功能如下
function fnGetCustomer() {
function a(a) {
$("#loading").hide();
//on some condition
//other wise no redirection
self.location = a;
}
var b = $("input#ucLeftPanel_txtMobile").val();
"" != b && ($("#loading").show(), $.ajax({
type: "POST",
url: "Services/GetCustomer.ashx",
data: { "CustMobile": b },
success: a,
async: false,
error: function () {
$("#loading").hide();
}
}));
}
和我的第二个函数我正在调用第一个函数
function fnSecond() {
$.ajax({
type: "POST",
url: "some url",
async: false,
data: { "CustMobile": b },
success: function(){
fnGetCustomer();
//if it has all ready redirected then do not redirect
// or redirect to some other place
},
error: function () {
$("#loading").hide();
}
}));
}
我正在使用我的第一个功能。所以我不想改变我的第一个功能。
答案 0 :(得分:2)
这样的设置应该有效;
$.ajax({
data: foo,
url: bar
}).done(function(response) {
if (response == "redirect") {
// redirect to some page
} else {
$.ajax({
data: foo,
url: bar
}).done(function(response2) {
if (response2 == "redirect") {
// redirect to some other page
} else {
// do something else
}
});
}
});
没有测试做过这样的事情,但这大概是我开始的方式
答案 1 :(得分:2)
如果您不需要第一个AJAX呼叫的结果能够发送第二个,您可以添加一个计数器来跟踪呼叫。由于您可以同时发送两个电话,因此响应速度会更快。
var requestsLeft = 2;
$.ajax({
url: "Firsturl.ashx",
success: successFunction
});
$.ajax({
url: "Secondurl.ashx",
success: successFunction
});
function successFunction()
{
requestsLeft--;
if (requestsLeft == 0)
doRedirectOrWhatever();
}
如果你绝对需要这样做,你可以做这样的事情。我的例子期望一个json响应,但这并不要求这种方法起作用。
var ajaxurls = ["Firsturl.ashx", "Secondurl.ashx"]
function doAjax()
{
$.ajax({
url: ajaxurls.shift(), // Get next url
dataType: 'json',
success: function(result)
{
if (result.redirectUrl) // or whatever requirement you set
/* redirect code goes here */
else if (ajaxurls.length>0) // If there are urls left, run next request
doAjax();
}
});
}
doAjax();