مرحبا

اليوم واجهتني مشكلة غريبة ! كانت اول مرة تواجهني في الاجاكس مع ال 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;



اتمنى ما احد ينخدع ويقعد ساعتين يجرب في الكود ويشك في كل اكواده
تحياتي