Как получить ошибку в ответе jQuery AJAX? - PullRequest
1 голос
/ 04 июля 2011

Я использую функцию jQuery $ .ajax () для выполнения операции вставки базы данных на страницу php.Итак, в случае успеха он выполнит обычную операцию, но я хочу, чтобы вызов ajax получил ошибку, если операция обновления завершится неудачей.

Так должно быть:

  1. $. Ajax ->вызов функции php
  2. Успешное получение при успешной вставке записи
  3. Получение ошибки при неудачной вставке

Итак, следует ли мне возвращать false;из моей функции PHP?Я думаю, что успех или ошибка $ .ajax () зависит от того, был ли вызов AJAX успешным или нет.Итак, я думаю, даже если я вернусь false;из моей функции PHP это все еще будет считаться «успехом» для вызова AJAX.Право

Ответы [ 6 ]

3 голосов
/ 04 июля 2011

Вы можете вернуть сообщение об ошибке в ответе вашего сервера (или используя JSON), как кто-то предложил.Но мне это не очень нравится, потому что это загрязняет возвращаемые данные.

Мне нравится другой способ, которым я пользовался в последнее время, который заключается в создании настраиваемого заголовка HTTP для информирования о наличии ошибки.

PHP-код:

if($there_was_error){
   header("DB_SUCCESS: 0"); //Sends a custom header
}else{
   header("DB_SUCCESS: 1");
}

jQuery-код:

$.ajax({
  ...
  success: function(data, status, xhr){
     //You can use your 'data' var as always
     if(xhr.getResponseHeader("DB_SUCCESS") == 1){
        alert("Save successful");
        //Your regular sutff
     }else{
        alert("Save failed");
     }         
  }
  ...
})

Как видите, мы создали собственный HTTP-заголовок, который называется DB_SUCCESS и будет использоваться какметаданные, поэтому мы можем назначить их на стороне сервера (php) и прочитать их на стороне клиента (javascript), чтобы узнать, произошла ли ошибка.

Надеюсь, это поможет.Приветствия

1 голос
/ 27 апреля 2012

Короче говоря, это просто: вы можете поймать любую вещь, возвращенную из PHP.

IN DETAIL: приведенный ниже фрагмент кода может помочь вам четко понять проблему.

PHP

$result = //your database result
if($result){
    //Print any success message you want the user to see   
    echo "Success";
}else{
    //Print any error message you want the user to see   
    echo "Error";
}

Jquery

$.ajax({
    type: "POST",
    url: "controller.php",
    data: params,
    success: function(msg){

    //Alert the returned message to the user,
    //the variable msg already contains your message 
    //whether it is success or error,
    //it can even contain HTML or JavaScript
        alert(msg);
    }
});
1 голос
/ 04 июля 2011

Я оцениваю ответ от сервера, и если в PHP произошла ошибка, он просто выводит код JavaScript для отображения ошибки.

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

Мне бы хотелось, чтобы этот подход был более популярным.

https://github.com/atk4/atk4/blob/master/templates/js/atk4_univ.js#L413

1 голос
/ 04 июля 2011

Вам необходимо обработать успех / ошибку PHP внутри вашего $ .ajax () success: function

Предположим, это ваш ajax.php:

if($whatever)
{
  echo 'success';
}
else
{
  echo 'fail';
}

Предположим, это ваш javascript $ .ajax ():

success: function(data)
{
    switch(data)
    {
        case 'success':
            // handle good logic
            break;
        case 'fail':
        default:
            // handle bad logic
            break;
    }
}
0 голосов
/ 04 июля 2011

Ajax происходит на клиенте.

Ваш PHP завершен на сервере.

Вот пример превосходный , который может помочь:

Обработка ошибок jQuery AJAX


    $.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);
       }
    });
0 голосов
/ 04 июля 2011

Я бы создал массив в PHP.Например,

$status['completed'] = true;
$status['message'] = "Completed";

Зависит от того, как вы используете вставку, измените эти два значения.

Тогда я бы сделал http://php.net/manual/en/function.json-encode.php json_encode и вывел бы его.Ваш jQuery получит JSON, а если completed равен true , то все в порядке.Если false , отметьте message.

Вы также можете использовать метод getJSON из jQuery, чтобы сделать его еще проще.

http://api.jquery.com/jQuery.getJSON/

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