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 في وظيفة و "reqest" الوظيفة مرة أخرى على الخطأ.
شيء linke هذا:
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();
}
});
}
...