Javascript AJAX调用完成后如何执行操作?
我尝试在不同的地方调用函数。这就是为什么我返回真或假。 我遇到的问题是,在信用卡还没来得及打电话之前,直接打给其他人Javascript AJAX调用完成后如何执行操作?,javascript,jquery,ajax,if-statement,callback,Javascript,Jquery,Ajax,If Statement,Callback,我尝试在不同的地方调用函数。这就是为什么我返回真或假。 我遇到的问题是,在信用卡还没来得及打电话之前,直接打给其他人 if (hasCreditCard($('#memberId').val())) { ... } else{ ... } function hasCreditCard(memberId) { var url = getHostName() + "/members/" + memberId + "/creditcard"; jQuery.ajax({
if (hasCreditCard($('#memberId').val())) {
...
}
else{
...
}
function hasCreditCard(memberId) {
var url = getHostName() + "/members/" + memberId + "/creditcard";
jQuery.ajax({
type: "head",
url: url,
contentType: "application/json",
headers: {
"Authorization": "Basic " + $.cookie('authorization')
},
success: function (data, status, jqXHR) {
if (jqXHR.status == 200) {
return true;
}
return false;
},
error: function (jqXHR, status) {
return false;
}
});
}
因为AJAX调用是异步的,并且您的if语句不等待调用结束 两种解决方案:
#1
:您可以将回调传递给函数,并在成功/错误处理程序中调用此回调:
getCreditCard($('#memberId').val(), function (hasCreditCard) {
if (hasCreditCard) {
...
} else {
...
}
})
function getCreditCard(memberId, nextStep) {
...
jQuery.ajax({
...
success: function (data, status, jqXHR) {
if (jqXHR.status == 200) {
nextStep(true)
return
}
nextStep(false)
},
error: function (jqXHR, status) {
nextStep(false)
}
})
}
getCreditCard($('#memberId').val())
function getCreditCard(memberId) {
...
jQuery.ajax({
...
success: function (data, status, jqXHR) {
if (jqXHR.status == 200) {
nextStep(true)
return
}
nextStep(false)
},
error: function (jqXHR, status) {
nextStep(false)
}
})
}
function nextStep(hasCreditCard) {
if (hasCreditCard) {
...
} else {
...
}
}
您可以创建另一个全局函数,并在成功/错误处理程序中调用此函数:
getCreditCard($('#memberId').val(), function (hasCreditCard) {
if (hasCreditCard) {
...
} else {
...
}
})
function getCreditCard(memberId, nextStep) {
...
jQuery.ajax({
...
success: function (data, status, jqXHR) {
if (jqXHR.status == 200) {
nextStep(true)
return
}
nextStep(false)
},
error: function (jqXHR, status) {
nextStep(false)
}
})
}
getCreditCard($('#memberId').val())
function getCreditCard(memberId) {
...
jQuery.ajax({
...
success: function (data, status, jqXHR) {
if (jqXHR.status == 200) {
nextStep(true)
return
}
nextStep(false)
},
error: function (jqXHR, status) {
nextStep(false)
}
})
}
function nextStep(hasCreditCard) {
if (hasCreditCard) {
...
} else {
...
}
}
将代码放入要在if`条件下执行的
ajax success``函数中,并在ajax error
函数中放入要在其他部分执行的代码您可以尝试ajax的async:false属性