ajax — возвращает ошибку подсластителю из переполнения стека

У меня есть этот код Ajax для обработки файла 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';
}

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

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

1

Решение

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

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

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

1

Другие решения

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

В вашем 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");
}
});

С использованием попробуй поймать Ваш код будет защищен от неожиданных ошибок.
Примечание. Конечно, вы можете редактировать заголовки вместо того, чтобы отображать свой собственный флаг и возвращать ошибку 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)));
}
1
По вопросам рекламы [email protected]