مرحبا
اليوم واجهتني مشكلة غريبة ! كانت اول مرة تواجهني في الاجاكس مع ال jQuery غلبتني كثيرا الصراحة .. لأني لم اتوقعها نهائيا !
فاحببت المشاركة للافادة
الموضوع باختصار لو عندك كود اجاكس .. يقوم بالتحقق من شيء ما من على السيرفر او الداتا بيز ويقوم بارجاع قيمة 0 او 1 مثلا .. بالشكل التالي
كود PHP:
function check_something(){
$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
success: function(msg){
if (msg){
return true;
}
}
}
return false;
}
});
يقوم الكود السابق .. بالتحقق من شيء ما من ملف some.php ويقوم بارجاع قيمة 1 او 0
طبعا الشرط if msg سيتحقق اذا كان ب 1 سيقوم بارجاع true وطبيعي اذا لم يكن 1 سيقوم باكمال تنفيذ الكود ويرجع false
الكود السابق .. طبيعي جدا وبديهي ومنطقي .. ولكن المفاجأة انه لن يعمل بالشكل الصحيح !!
باختصار .. لأن تنفيذ الكود سيرسل الطلب للاجاكس ، وقبل وصول الرد .. سيقوم باكمال تنفيذ الكود .. إلى ان يصل لنقطة return false
ولهذا تجد ان الراجع false رغم ان some.php قيمته 1 فعلا !
الحل يكمن في اضافة
async:false
في كود الاجاكس .. ولهذا تجبر المتصفح على انتظار رد الاجاكس اولا .. ثم اكمال الكود !
الكود الصحيح يكون هكذا :
كود PHP:
function check_something(){
$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
async:false,
success: function(msg){
if (msg){
return true;
}
}
}
return false;
}
اتمنى ما احد ينخدع ويقعد ساعتين يجرب في الكود ويشك في كل اكواده
تحياتي