我一直在反对这张桌子,但我不确定为什么javascript / jQuery(1.71)在做其他事情之前没有完成它的任务。
我正在调用一个严格来说是jQuery Ajax调用的函数。 该函数执行Ajax部分,但.done在离开函数之前没有被处理并返回到原始调用函数。
如果仔细查看代码,我会删除非必要代码,但会离开调用。所以我调用processAjax函数。当我浏览它时,调用该函数,执行Ajax过程,然后它返回到dups函数,并在处理完成部分之前触发警报(在这里停止')。
发生了什么?!?
以下是一些代码:
function dups(){
$('#dupChecker').val(2);
if ($('#spDegree').length){
// do logic here
}
else if ($('#meetingID').length){
// do logic here
}
else {
// do logic here
}
processAjax(user, actDate, meetID, degree, act);
alert('stopping here');
return 0;
};
function processAjax(a,b,c,d,e){
$.ajax({
url: "deSubmit_testDups.cfm",
cache:false,
method: "POST",
data: {id:a, aDate:b, meet:c, degree:d, act:e},
dataType: "html"
})
.done(function( html ) {
myResult = parseInt($.trim( html ));
alert ('myresult= '+ myResult);
if (myResult == 0){
$('#submitBTN').prop("disabled",false);
$('#errorMsg').css("visibility","hidden");
$('#dupChecker').val(1);
}
else {
$('#submitBTN').prop("disabled",true);
$('#errorMsg').css("visibility","visible");
$('#dupChecker').val(0);
}
})
.fail(function( jqXHR, textStatus ) {
alert( "Request failed: " + textStatus );
});
};
答案 0 :(得分:-1)
function dups(){
$('#dupChecker').val(2);
if ($('#spDegree').length){
// do logic here
}
else if ($('#meetingID').length){
// do logic here
}
else {
// do logic here
}
processAjax(user, actDate, meetID, degree, act, function(resp){
alert('stopping here');
});
return 0;
};
function processAjax(a,b,c,d,e, callback){
$.ajax({
url: "deSubmit_testDups.cfm",
cache:false,
method: "POST",
data: {id:a, aDate:b, meet:c, degree:d, act:e},
dataType: "html"
})
.done(function( html ) {
myResult = parseInt($.trim( html ));
alert ('myresult= '+ myResult);
if (myResult == 0){
$('#submitBTN').prop("disabled",false);
$('#errorMsg').css("visibility","hidden");
$('#dupChecker').val(1);
}
else {
$('#submitBTN').prop("disabled",true);
$('#errorMsg').css("visibility","visible");
$('#dupChecker').val(0);
}
callback();
})
.fail(function( jqXHR, textStatus ) {
alert( "Request failed: " + textStatus );
callback();
});
};
希望这会对你有所帮助。您可以使用回调来使其同步。您还可以将ajax响应传递给回调。