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.');
}
});
解決
あなたは機能やエラー時に再び「reqest」機能であなたの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;
};
悪いサーバー:しかし、最善のことは、サーバーを修正することです..このようなものは別の問題を補うだけのハックやパッチです。 :)
それはどんな生産シナリオのための良いアイデアではありませんので。
他のヒント
返されるエラーを追加する場合は、データベースへの挿入のコントロールを作成することができます。
...
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();
}
});
}
...
所属していません StackOverflow