AJAX поймать правильный код ошибки - PullRequest
1 голос
/ 24 мая 2011

у меня есть этот маленький код для отправки на мой сервер

    $.ajax({
      type: 'POST',
      url: 'post.php',
      data: { token: '123456', title: 'some title', url: 'http://somedomain.com', data: '' },
      success: function(data){
        alert (data)
      }
    });        

Интересно, как я могу "перехватить" разные ошибки для запроса ajax: например, post.php возвращает 'token error' при неверном токенебыл опубликован или «недействительный заголовок» за отсутствующий заголовок.

Заранее спасибо

Ответы [ 4 ]

2 голосов
/ 24 мая 2011

Если сервер отправляет что-то, кроме кода состояния 200, вы можете использовать обработчик ошибок:

$.ajax({
    type: 'POST',
    url: 'post.php',
    data: { 
        token: '123456', 
        title: 'some title', 
        url: 'http://somedomain.com', 
        data: '' 
    },
    success: function(data){
        alert(data);
    },
    error: function() {
        alert('some error occurred');
    }
}); 

Если ваш сервер выполняет некоторую проверку аргументов запроса, возможно, он может вернуть объект JSON, содержащий информацию об ошибке(и установите правильное значение Content-Type: application/json):

{ error: 'some error message' }

В этом случае вы можете обработать это в обратном вызове успеха:

success: function(data) {
    if (data.error != null && data.error != '') {
        // TODO: the server returned an error message
        alert(data.error);
    } else {
        // TODO: handle the success case as normally
    }
}
1 голос
/ 24 мая 2011
// build the initial response object with no error specified
$response = array(
  'error' => null
);

// the data checks went fine, process as normal
if (data is ok) {
  $response['some_object'] = value;

// something is bad with the token
} else if (bad token) {
  $response['error'] = 'token error';

// something is bad with the title
} else if (bad title) {
  $response['error'] = 'bad title';

// some other error occured
} else {
  $response['error'] = 'unspecified error';
}

// output, specifying that it's JSON data being returned
header('Content-Type: application/json');
echo json_encode($response);

и ....

// $.ajax({ ...
success: function(data){
  if (!data.error){
    alert('OK!');
  }else{
    alert('Error: '+data.error);
  }
}
// });

Может быть, что-то подобное?(Если вы не говорите о допустимых ошибках AJAX, в этом случае укажите параметр error: function(x,t,e){} ajax или используйте .ajaxError)

0 голосов
/ 25 мая 2011

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

Взгляните на http://api.jquery.com/jQuery.ajax/ в настройке ошибки.

0 голосов
/ 24 мая 2011

Мне нравится устанавливать dataType для $.ajax() на 'json', а затем на странице PHP вы можете просто отобразить ассоциативный массив json_encode()ed.Это позволит вам ссылаться на значения через функциональный параметр data (т.е. data.success, data.message).Дайте мне знать, если вам нужны примеры.

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