在Ajax调用中使用Success()或Complete()

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (335)

我想了解下面的Ajax调用,从complete()方法;

当我取代complete()带着success(),我得到了一个空的n.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;
});
提问于
用户回答回答于

是因为success()返回时间早于complete()

;AJAXsuccess()方法在complete()方法。

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

  • success()(本地事件)只有在请求成功时才被调用(没有来自服务器的错误,也没有数据错误)。
  • 另一方面,complete()(本地事件)被调用,无论请求是否成功。即使是同步请求,您也始终会收到完整的回调。
用户回答回答于

completesuccesserror回调被执行。

也许你应该检查第二个参数complete也提供。这是一个字符串,保存了ajaxCall所拥有的成功类型。

我猜你错过了completesuccess函数(我知道不一致的API)得到不同的数据。success只获取数据,complete得到整个XMLHttpRequest对象。当然没有responseText属性。

所以如果你用complete带着success你还必须替换data.responseText带着data只有。

成功

函数得到两个参数:从服务器返回的数据(根据‘dataType’参数格式化)和描述状态的字符串。

完全

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

如果你需要访问整个XMLHttpRequest对象中的“成功回调”,我建议尝试此方法。

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

扫码关注云+社区

领取腾讯云代金券