2015-09-15 3 views
1

У меня есть этот Ajax код для обработки PHP-файлывозвращаемой ошибка в sweetalert из PHP

$.ajax({ 
    url:'vals/Package.php', 
    data:$(this).serialize(), 
    type:'POST', 
    success:function(data){ 
    console.log(data); 
    swal("Success", "We will contact you soon! Thank you :)", "success"); 
    }, 
    error:function(data){ 
    swal("Sorry", "Failed to send order. Please try later :(", "error"); 
    } 
}); 

в моем Package.php

$Query = mysqli_query($connecDB,"insert into query here"); 
if($Query){ 
    echo 'success message'; 
} 
else{ 
    echo 'error here'; 
} 

если есть ошибка вставки в базу данных, как я могу отправить это для сладости?

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

+0

Я обычно возвращаю строку JSON из моего PHP с ключами, как '' msg' или err' для сообщений о состоянии и иногда 'success' булева. Затем я могу просто найти соответствующие ключи в возврате json и, если задано, 'alert (result.msg)' ... и т. Д. –

ответ

1

Теперь вы просто повторяете строку с ошибкой, но этот ответ все равно будет отправлен с заголовком статуса 200. Что вам нужно сделать, это установить заголовки в явном виде:

header('HTTP/1.1 500 Internal Server Error'); 
echo 'error message'; 

Я думаю, что я прав, говоря, что JQuery просто рассматривает все Non HTTP 200 ответов как ошибки (например, неудачные запросы). Могут быть некоторые исключения из этого, например, 404, 301 или, возможно, коды состояния 201. В любом случае, если вы хотите указать на серьезную проблему: используйте http 500 (внутренняя ошибка сервера)

1

Лучшее решение использует try/catch и отправляет два вида сообщений в качестве ответа, следующее - с помощью собственного кода:

В вашем package.php

try { 
    $Query = mysqli_query($connecDB, "insert into query here"); 
    if ($Query) { 
     echo 'success message'; 
    } else { 
     throw new Exception('dummy error message'); 
    } 
} catch (Exception $exc) { 
    //handle any errors in your code, including connection issues 
    echo 'error'; //this will be your "flag" to handle on the client side 
    //and if you want, can also log the error with 
    //$exc->getMessage() or $exc->getTraceAsString() 
    die; 
} 

В файле JS:

$.ajax({ 
    url: 'vals/Package.php', 
    data: $(this).serialize(), 
    type: 'POST', 
    success: function (data) { 
     if (data !== 'error') { 
      swal("Success", "We will contact you soon! Thank you :)", "success"); 
     } else { 
      //our handled error 
      swal("Sorry", "Failed to send order. Please try later :(", "error"); 
     } 
    }, 
    error: function (data) { 
      //other errors that we didn't handle 
     swal("Sorry", "Failed to send order. Please try later :(", "error"); 
    } 
}); 

с использованием try/catch кода будет быть пуленепробиваемым против неожиданных ошибок. Примечание. Конечно, вы можете редактировать заголовки вместо эха вашего собственного флага и возвращать ошибку http, которая будет обрабатываться в вашей функции ошибки ajax.

1

Я нашел этот код, он, кажется, работает

if($Query){ 

} 
else{ 
    header('HTTP/1.1 500 Internal Server...'); 
    header('Content-Type: application/json; charset=UTF-8'); 
    die(json_encode(array('message' => 'ERROR', 'code' => 1337))); 
}