Обработка ошибок JQuery AJAX - PullRequest
6 голосов
/ 09 января 2010

Я искал вопросы здесь, но у меня нет хорошего понимания того, как использовать обработку ошибок в AJAX jQuery (я нуб, так что это просто не имеет смысла).

Кто-нибудь может описать это новичку? В настоящее время я публикую информацию в сценарии PHP через AJAX, но хочу разрешить jQuery распознавать, являются ли возвращенные данные из сценария ошибочными или успешными.

Спасибо! Dave

Ответы [ 4 ]

20 голосов
/ 09 января 2010

Ошибка возврата из вызова ajax возвращает результаты из загрузки страницы, которая не была успешной. Возможно, ваша php-страница возвращает действительную страницу, но с результатами, которые не соответствуют вашим ожиданиям. Это обрабатывается с возвращением успеха. Надеюсь, следующий фрагмент кода поможет проиллюстрировать ...

$.ajax({
    type: "POST",
    url: "login.php",
    data: "action=login&user=" + user + "&pass=" + pass,
    success: function(xhr){
        if ((xhr == "Invalid Login") 
                || (xhr == "Invalid charaters in username.") 
                || (xhr == "Missing username or password.")
                || (xhr == "Unknown Error")) {
            $("#loginMessageContent").html(xhr);
        }
        else {
            simplemodalClose (dialog);
        }
   }, 
   error: function(xhr) {
       alert ("Oopsie: " + xhr.statusText);
   }
});
2 голосов
/ 16 января 2010

Даже если это не ваша проблема, я буду публиковать здесь, поскольку это связано.

В недавнем выпуске JQuery v1.4 ответы JSON теперь проверяются. Это сломало мое приложение, потому что я вернулся:

 {success:true}

и теперь он должен быть

 {"success":true} // HAS to be double quotes, single won't do it

Если указано неверно, он вызывает обработчик ошибок. Легко исправить, но потребовалось немного, чтобы выяснить.

2 голосов
/ 09 января 2010

Это только 1 подход. Я строю приложение, которое возвращает все свои данные в формате JSON. Если есть ошибка, то сообщение JSON изменяется, чтобы отразить это. Каждый возвращаемый объект имеет «статус» либо «успех» или «ошибка». Если это ошибка, то есть часть «error_message» в JSON, которая описывает ошибку.

Надеюсь, это поможет.

2 голосов
/ 09 января 2010

JQuery AJAX обработка ошибок реализована для обработки, если HTTP Request имеет ошибку, а не если ваш скрипт возвращает «error» или «success». Если сервер выдает ошибку (404 Not Found или 500 Server Error в качестве примера), то он вызовет функции ошибок jQuery. Это может быть обработано несколькими способами, но один хороший способ - показать div, сообщающий пользователю, что произошла ошибка.

HTML

<div id="error" style="display: none">There was an error processing your last request</div>

JQuery

$(function(){
   $("#error").ajaxError(function(){
      var $error = $(this);
      $error.slideDown(500, function(){
          window.setTimeout(function(){
              $error.slideUp(500);
          }, 2000);
      }); 
   });
});

Если произойдет ошибка, ни один из ваших «успешных» методов не сработает, и этот div соскользнет вниз, подождите 2 секунды, а затем снова сдвинется вверх.

Проверка скрипта на наличие ошибок

Как я уже упоминал, то, что вы описали, звучит так, как будто ваш серверный скрипт посылает "ошибку" или "успех" или что-то подобное обратно клиенту.

Если вы используете, например, $.post, ваш код обработки ошибок может выглядеть следующим образом:

$.post('/your/url', { save_me: true }, function( data ){
   if(data == "error"){ 
      // handle error
   } else {
      // handle success
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...