jQuery:Обработка ответов на внутренние ошибки Сервера
-
25-09-2019 - |
Вопрос
У меня есть форма на странице, которая добавляет новые данные в базу данных с помощью jQuery.Это работает нормально, но иногда сервер выходит из строя, и я получаю 500 (Внутренняя ошибка сервера), но это потому, что мой сервер - отстой.
Проблема в том, что я иногда получаю сообщение об ошибке сервера после того, как PHP выполняет добавление в базу данных, но вместо получения сообщения об успешном завершении я получаю сообщение об ошибке, даже несмотря на то, что добавление было произведено.Итак, как мне следует поступить, чтобы убедиться, что PHP не добавит данные, если я получу сообщение об ошибке?
[И да, я в конце концов переключусь на новый сервер, но ни один сервер не идеален]
Вот сценарий:
$.ajax({
type: "POST",
url: "/clase/do-add",
data: $("#add").serialize(),
dataType: "json",
timeout: 8000,
beforeSend: function() {
var icon = '<p class="loading-add"></p>'; // loading icon
$('form#add').append(icon);
},
success: function(data) {
if (data.error == true) { // php returns error = true if name is invalid
alert('Invalid name.');
$('form#add').find('p').remove();
} else {
// make the addition
}
},
error: function () {
$('form#add').find('p').remove();
alert('Error. Try again.');
}
});
Решение
Вы можете обернуть вас AJAX CALL в функции и снова «Reqest» функцию снова по ошибке.
Что-то в Линке это:
jQuery.fn = function yourajaxfunction(){
$.ajax({
type: "POST",
url: "/clase/do-add",
data: $("#add").serialize(),
dataType: "json",
timeout: 8000,
beforeSend: function() {
var icon = '<p class="loading-add"></p>'; // loading icon
$('form#add').append(icon);
},
success: function(data) {
if (data.error == true) { // php returns error = true if name is invalid
alert('Invalid name.');
$('form#add').find('p').remove();
} else {
// make the addition
}
},
error: function () {
$('form#add').find('p').remove();
// ####### i added this:
$(this).yourajaxfunction();
alert('Error. Try again.');
}
});
}
Или вы можете иметь функцию простоя, которая снова проверяет после некоторых милисекунтов, прежде чем выполнить функцию снова по ошибке:
$(this).idle().yourajaxfunction();
Функция холостого хода используется выше:
jQuery.fn.idle = function(time){
var o = $(this);
o.queue(function(){
setTimeout(function(){
o.dequeue();
}, time);
});
return o;
};
Но лучшее, что нужно исправить сервер .. Этот материал просто взлома и исправления, которые компенсируют другую проблему: плохой сервер. :)
Так что это не хорошая идея для любых производственных сценариев.
Другие советы
можете ли вы создать элемент управления вставкой в базу данных, если при добавлении возвращается ошибка.
...
error: function () {
var fError = function() {
$('form#add').find('p').remove();
alert('Error. Try again.');
};
$.ajax({
type: "GET",
url: "/clase/do-check",
data: {id: id}, // id for check
dataType: "json",
success: function(data) {
if (!data.ok)
fError();
},
error: function () {
fError();
}
});
}
...