2010-11-05 1 views
4

У меня есть форма, которая сериализуется JQuery и отправляется через .ajax() в URL-адрес.JQuery .ajax() Успех всегда срабатывает (даже когда сервер возвращает код ошибки)

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

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

Любые идеи, что происходит? Вот мой код 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 для быстро указав его :)

ответ

7

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

  $.ajax({ 
       type: 'POST', 
       url: theURL, 
       data: $("#a-dialog-form").serialize(), 
       success: function(){alert('ok!');} // The function will be called upon success. 
      }); 
+0

Doh! Конечно! Спасибо :) – UpTheCreek

+0

+1 - код OPs присваивает * возвращаемое значение * 'alert (" ok! ")' Для свойства 'success' –

1

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

То, что вы должны сделать, это что-то вроде этого:

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

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

Смежные вопросы