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

Я хочу понять вызов AJAX ниже, с точки зренияcomplete() Способ;

Когда я заменяюcomplete() сsuccess()Я получаю пустойresponseText так же, как с AJAXerror() метод.

С другой стороны, когда я покидаю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;
});

Ответы на вопрос(3)

& Quot; полная выполняется после завершения вызова ajax.; успех; выполняется, когда вызов ajax заканчивается успешным кодом ответа.

 20 июн. 2009 г., 08:20
спасибо, но чтобы быть ясным, должен ли я использовать код для выполнения с полным вариантом, а не с успехом. И будет ли опция ошибки работать только с полной опцией?
 20 июн. 2009 г., 08:23
или это говорит о том, что я не получаю код ответа успеха, странно?

success() returns earlier than complete()?

Yes; AJAXsuccess() Метод работает доcomplete() метод.

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

AJAX call process flow diagram.

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

The success() (Local Event) is only called if the request was successful (no errors from the server, no errors with the data).

On the other hand, the complete() (Local Event) is called regardless of if the request was successful, or not. You will always receive a complete callback, even for synchronous requests.

... more details on AJAX Events Вот.

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

Может быть, вы должны проверить второй параметрcomplete предложения тоже. Это строка, содержащая тип успеха, который имел ajaxCall.

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

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

Так что если вы заменитеcomplete сsuccess Вы также должны заменитьdata.responseText сdata только.

success

The function gets passed two arguments: The data returned from the server, formatted according to the 'dataType' parameter, and a string describing the status.

complete

The function gets passed two arguments: The XMLHttpRequest object and a string describing the type of success of the request.

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

var myXHR = $.ajax({
    ...
    success: function(data, status) {
        ...do whatever with myXHR; e.g. myXHR.responseText...
    },
    ...
});
 20 июн. 2009 г., 09:32
Я отредактировал свой вопрос так, чтобы он содержал полный код, который я использовал. Он не дает никаких ошибок, но я, вероятно, могу исключить опцию успеха. Если результат тот же.
 20 июн. 2009 г., 09:03
Кроме того, в дополнение к моему последнему комментарию, мой код сверху все еще содержит ошибку. Короче, все ли будет без недостатков, если я упущу вариант успеха. Извините, если это звучит так, как будто я еще не понимаю. Это немного смущает меня.
 20 июн. 2009 г., 08:58
К сожалению, комментарий пришел одновременно. Итак, если я правильно понял. Полная функция содержит всю информацию, которая мне нужна. Успех содержит меньше, если вы не передадите два аргумента в функцию. Я надеюсь, что я не становлюсь глупым, но полон, как я использовал тогда не достаточно все время? Или это успех более легкий?
 20 июн. 2009 г., 15:12
complete получает весь объект XMLHttpRequest. success получает содержимое свойства XMLHttpRequest.responseText. Ваш код выше должен работать без обратного вызова также без каких-либо побочных эффектов, так как он все равно ничего не делает. Но есть разница в использовании успеха или завершения. Успех вызывается только после успешного выполнения запроса. Но полный обратный вызов срабатывает при успехе и при ошибке. Проверять, выписыватьсяdocs.jquery.com/Ajax_Events лучше понять, в каком порядке и при каких обстоятельствах какие обратные вызовы выполняются с помощью jquery

Ваш ответ на вопрос