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

时间:2009-06-20 06:09:25

标签: jquery ajax

我希望根据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;
});

4 个答案:

答案 0 :(得分:48)

执行completesuccess回调后执行

error

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

此处jQuery.ajax( options )

详细介绍了不同的回调

我猜你错过了completesuccess函数(我知道API不一致)传入不同数据的事实。success只获取数据{{1}获取整个complete对象。当然,数据字符串上没有XMLHttpRequest属性。

因此,如果您将responseText替换为complete,则还必须将success替换为data.responseText

<强>成功

  

该函数传递了两个   arguments:从中返回的数据   服务器,根据的格式   'dataType'参数和一个字符串   描述状态。

<强>完整

  

该函数传递了两个   arguments:XMLHttpRequest对象   以及描述其类型的字符串   请求成功。

如果您需要访问成功回调中的整个data对象,我建议您尝试使用此功能。

XMLHttpRequest

答案 1 :(得分:39)

  

success()是否早于complete()返回?

; AJAX success()方法在complete()方法之前运行。

下面是一个说明流程的图表:

AJAX call process flow diagram.

重要的是要注意

  • 只有在请求成功时才会调用success()(本地事件)(服务器没有错误,数据没有错误。)

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

...有关AJAX活动的更多详情here

答案 2 :(得分:12)

当ajax调用完成时,

“complete”执行。当ajax调用以成功的响应代码完成时,“success”就会执行。

答案 3 :(得分:2)

好吧,从隔离区来讲,$。ajax中的complete()就像try catch块中的finally一样。

如果在任何编程语言中使用try catch块,则成功执行某件事或执行时遇到错误都无关紧要。 finally {}块将始终执行。

$。ajax中的complete()也一样,无论您得到success()响应还是error()complete()函数总是在执行完成后被调用。 / p>