我在页面上有一个表单,通过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.');
}
});
答案 0 :(得分:0)
您可以在函数中包装ajax调用,并在出错时再次“请求”该函数。
有点像这样:
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;
};
但最好的办法是修复服务器..这些东西只是黑客和补丁,可以弥补另一个问题:糟糕的服务器。 :)
因此,对于任何生产场景都不是一个好主意。
答案 1 :(得分:0)
如果添加了返回的错误,是否可以创建对数据库的插入控件。
...
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();
}
});
}
...