JQuery .ajax () всегда срабатывает успешно (даже когда сервер возвращает код ошибки) - PullRequest
4 голосов
/ 05 ноября 2010

У меня есть форма, которая сериализуется JQuery и отправляется через .ajax () на URL.

Проблема в том, что функция success: всегда вызывается независимо от того, возвращает ли сервер код ошибки или нет.

На самом деле успех срабатывает еще до того, как сервер откликнулся (я поставил точку останова на методе сервера, который обслуживает запрос - успех срабатывает даже до того, как этот метод будет завершен). Если сервер возвращает код ошибки (например, код состояния 500), JQuery вызывает ОБА события успеха и ошибки!

Есть идеи, что происходит? Вот мой код jquery:

$("#a-dialog").dialog({
    autoOpen: false,
    height: 300,
    width: 400,
    modal: true,
    buttons: {
    "Submit": function() {
                $.ajax({
                  type: 'POST',
                  url: theURL,
                  data: $("#a-dialog-form").serialize(),
                  success: alert('ok!') // THIS IS ALWAYS CALLED (IMMEDIATELY)
                });
        },
    },
});

UPDATE:

Это была глупая ошибка с моей стороны! Спасибо blue112 за быстрое указание на это:)

Ответы [ 2 ]

7 голосов
/ 05 ноября 2010

Это нормально, вы должны передать его как обратный вызов, например,

            $.ajax({
              type: 'POST',
              url: theURL,
              data: $("#a-dialog-form").serialize(),
              success: function(){alert('ok!');} // The function will be called upon success.
            });
1 голос
/ 05 ноября 2010

Вы должны обеспечить успех указателем на функцию или, как обычно используется, путем передачи определения функции.

Что вам нужно сделать, это примерно так:

 "Submit": function() {
                $.ajax({
                  type: 'POST',
                  url: theURL,
                  data: $("#a-dialog-form").serialize(),
                  success: function (data) {
                          alert('ok!') // THIS IS ALWAYS CALLED (IMMEDIATELY)
                  }
                });
        },
    },

В вашем случае происходит то, что оповещение вызывается сразу, так что вы увидите оповещение, даже если запрос ajax вообще не сработал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...