Подтвердить что ты не робот

Использовать success() или complete() в вызове AJAX

Я хочу понять вызов AJAX ниже, в терминах метода complete();

Когда я заменяю complete() на success(), я получаю пустой ответText так же, как с помощью метода 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;
});
4b9b3361

Ответ 1

complete выполняется после выполнения обратного вызова success или error.

Возможно, вам нужно также проверить второй параметр complete. Это String, поддерживающая тип успеха ajaxCall.

Различные обратные вызовы описаны здесь немного подробнее jQuery.ajax( options )


Я думаю, вы упустили тот факт, что функция complete и success (я знаю несогласованный API) получает разные данные, переданные в. success получает только данные, complete получает весь объект XMLHttpRequest, Конечно, в строке данных нет свойства responseText.

Итак, если вы замените complete на success, вам также нужно заменить data.responseText на data.

успех

Функция получает два Аргументы: данные, возвращенные из сервер, отформатированный в соответствии с 'dataType' и строка описывая статус.

полный

Функция получает два arguments: объект XMLHttpRequest и строка, описывающая тип успех запроса.

Если вам нужен доступ ко всему объекту XMLHttpRequest в обратном вызове успеха, я предлагаю попробовать это.

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

Ответ 2

Является ли это, что success() возвращает раньше complete()?

Да; метод AJAX success() выполняется до метода complete().

Ниже приведена диаграмма, иллюстрирующая поток процесса:

AJAX схема процесса вызова вызова.

Важно отметить, что

  • success() (Локальное событие) вызывается только в том случае, если запрос был успешным (никаких ошибок с сервера, никаких ошибок с данными).

  • С другой стороны, complete() (Локальное событие) вызывается независимо от того, был ли запрос успешным, или нет. Вы всегда получите полный обратный вызов, даже для синхронных запросов.

... подробнее о событиях AJAX здесь.

Ответ 3

"complete" выполняется, когда вызов ajax завершен. "success" выполняется, когда вызов ajax заканчивается успешным кодом ответа.