我希望根据complete()
方法理解下面的AJAX调用;
当我用complete()
替换success()
时,我得到一个空的 responseText ,就像使用AJAX error()
方法一样。
另一方面,当我将complete()
方法保留原样时,一切都按预期工作。
success()
是否早于complete()
返回?
$("#formnaw").submit(function() {
var fnc = invoerFnc.attr("value");
var vnaam = invoerVnaam.attr("value");
var anaam = invoerAnaam.attr("value");
var str1 = invoerStr1.attr("value");
var nr1 = invoerNr1.attr("value");
var pc1 = invoerPc1.attr("value");
var pl1 = invoerPl1.attr("value");
var tel1 = invoerTel1.attr("value");
var mob1 = invoerMob1.attr("value");
var em1 = invoerEm1.attr("value");
var goknop = $("#formnaw > .instelling_go");
//we deactiveren de submit knop tijdens het verzenden
goknop.attr({
disabled: true
});
goknop.blur();
//stuur de post variabelen naar livetabs.php
$.ajax({
type: "POST",
url: "registraties/instellingenact.php",
data: "actie=wijzignaw&vnaam=" + vnaam + "&anaam=" + anaam + "&functie=" + fnc + "&straat=" + str1 + "&nr=" + nr1 + "&postcode=" + pc1 + "&plaats=" + pl1 + "&tel=" + tel1 + "&mob=" + mob1 + "&email=" + em1,
timeout: 5000,
success: function(data, textStatus) {
alert('bij success');
//doe iets
} //EINDE success
,
error: function(XMLHttpRequest, textStatus, errorThrown) {
if (textStatus == 'timeout') {
//doe iets
} else if (textStatus == 'error') {
//doe iets
}
//her-activeer de zend knop
goknop.attr({
disabled: false
});
} //EINDE error
,
complete: function(data) {
updatelijst.append(data.responseText + "<br>");
if (data.responseText.indexOf("Fout") != -1) {
$('#formnaw').find('td.foutnr1').prepend(data.responseText);
} else {
updatelijst.animate({
opacity: 'show'
}, 1000, function() {});
}
//her-activeer de zend knop
goknop.attr({
disabled: false
});
} //EINDE complete
}); //EINDE ajax
//we stoppen het standaard gedrag van een submit, zodat de pagina niet wordt vernieuwd.
return false;
});
答案 0 :(得分:48)
complete
或success
回调后执行 error
。
也许你应该检查第二个参数complete
。这是一个拥有ajaxCall成功类型的String。
我猜你错过了complete
和success
函数(我知道API不一致)传入不同数据的事实。success
只获取数据{{1}获取整个complete
对象。当然,数据字符串上没有XMLHttpRequest
属性。
因此,如果您将responseText
替换为complete
,则还必须将success
替换为data.responseText
。
<强>成功强>
该函数传递了两个 arguments:从中返回的数据 服务器,根据的格式 'dataType'参数和一个字符串 描述状态。
<强>完整强>
该函数传递了两个 arguments:XMLHttpRequest对象 以及描述其类型的字符串 请求成功。
如果您需要访问成功回调中的整个data
对象,我建议您尝试使用此功能。
XMLHttpRequest
答案 1 :(得分:39)
success()
是否早于complete()
返回?
是强>; AJAX success()
方法在complete()
方法之前运行。
下面是一个说明流程的图表:
重要的是要注意
只有在请求成功时才会调用success()
(本地事件)(服务器没有错误,数据没有错误。)
另一方面,无论请求是否成功,都会调用complete()
(本地事件)。即使是同步请求,您也将始终收到完整的回调。
...有关AJAX活动的更多详情here。
答案 2 :(得分:12)
“complete”执行。当ajax调用以成功的响应代码完成时,“success”就会执行。
答案 3 :(得分:2)
好吧,从隔离区来讲,$。ajax中的complete()
就像try catch块中的finally
一样。
如果在任何编程语言中使用try catch块,则成功执行某件事或执行时遇到错误都无关紧要。 finally {}块将始终执行。
$。ajax中的complete()
也一样,无论您得到success()
响应还是error()
,complete()
函数总是在执行完成后被调用。 / p>