在AJAX调用中使用success()或complete()

40 ajax jquery

我想在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;
});
Run Code Online (Sandbox Code Playgroud)

jit*_*ter 48

complete执行successerror回调后执行.

也许你应该检查第二个参数complete提供.这是一个拥有ajaxCall成功类型的String.

这里将更详细地描述不同的回调 jQuery.ajax( options )


我猜你错过了这个completesuccess函数(我知道不一致的API)传入不同数据的事实.successcomplete获取数据,得到整个XMLHttpRequest对象.当然responseText,数据字符串上没有属性.

所以,如果你更换completesuccess你也有更换data.responseTextdata而已.

成功

该函数传递两个参数:从服务器返回的数据,根据'dataType'参数格式化,以及描述状态的字符串.

完成

该函数传递两个参数:XMLHttpRequest对象和描述请求成功类型的字符串.

如果您需要XMLHttpRequest在成功回调中访问整个对象,我建议您尝试这样做.

var myXHR = $.ajax({
    ...
    success: function(data, status) {
        ...do whatever with myXHR; e.g. myXHR.responseText...
    },
    ...
});
Run Code Online (Sandbox Code Playgroud)


nye*_*eke 45

success()早于返回complete()吗?

是的 ; AJAX success()方法在complete()方法之前运行.

以下是说明流程的图表:

AJAX调用流程图.

重要的是要注意到这一点

  • success()(本地事件)如果请求成功,才会调用(服务器没有错误,与数据没有错误).

  • 另一方面,complete()无论请求是否成功,都会调用(本地事件).即使是同步请求,您也将始终收到完整的回调.

...对AJAX事件的更多细节在这里.


Fra*_*rth 12

当ajax调用完成时,"complete"执行.当ajax调用以成功的响应代码完成时,"success"执行.


Kir*_*irk 5

好吧,从隔离来看complete(),$.ajax 中的就像finallytry catch 块中的一样。

如果您在任何编程语言中使用 try catch 块,那么您是否成功执行某件事或在执行中遇到错误都没有关系。finally{} 块将始终被执行。

这同样适用于complete()在阿贾克斯$,你是否得到success()响应,或者error()complete()一次执行已经完成函数总是会被调用。