كيف تجعل البرنامج النصي ينتظر حالة الحصول على طلب AJAX قبل المتابعة؟

StackOverflow https://stackoverflow.com/questions/2431567

  •  19-09-2019
  •  | 
  •  

سؤال

أساسا ما أفعله هو التحقق من وجود كائن، إذا لم يتم العثور عليه، فسيحاول البرنامج النصي تحميل الملف المصدر باستخدام Getting. أريد فقط التحقق من ذلك مرة واحدة، ثم إرجاع TRUE أو FALSE إلى الوظيفة التي تستدعي جلب ()

  fetch:function(obj){
      ...
        isReady = false;
   $.getScript(obj.srcFile,function(){

    isReady=true;
    warn("was able to load object "+key);

   });

   return isReady;

   }

ولكن عودة الركلات قبل الأحمال النصية = /

في وقت لاحق يتم تحميل البرنامج النصي ولكن تم إرجاع الوظيفة خطأ.

هذا هو جمال غير متزامن أفترض ...

ما هي أفضل طريقة للتعامل مع هذا ... ربما يمكنني التحقق مرة أخرى في نقطة أخرى إذا كان الكائن موجود؟

أو ربما هناك طريقة أفضل للقيام بذلك حيث لا أضطر إلى قفل المتصفح؟

هل كانت مفيدة؟

المحلول

من تنظيم الكود الخاص بك أنا أظن أنك تستخدم كائن لاحتواء طرقك. إذا كان الأمر كذلك، فيمكنك استخدام أحداث مخصصة مثل هذا:

var thing = {
    fetch: function(obj){
        var self = this;
        if (obj.isReady){
            self.trigger('ready', [obj]);
            return;
        }
        $.getScript(obj.srcFile,function(){
            obj.isReady = true;
            self.trigger('ready', [obj]);
        });
    }   
};

thing.bind('ready',function(e, obj){
    // do what you need to do when the object exists here
});
var obj = {};
thing.fetch(obj);

نصائح أخرى

يرى jquery.ajax (): يجعلون async خاطئة.

بشكل افتراضي، يتم إرسال جميع الطلبات غير المتزامنة (أي تعيين هذا صحيح بشكل افتراضي). إذا كنت بحاجة إلى طلبات متزامنة، ضع هذا الخيار على خطأ. لاحظ أن الطلبات المتزامنة قد تقوم بإغلاق المتصفح مؤقتا، وتعطيل أي إجراءات أثناء التنشيط بالنشاط.

fetch:function(obj){
 isReady = false;
 $.getScript(obj.srcFile,function(script_data){

  isReady=true;
  warn("was able to load object "+key);
  if ( typeof( script_data ) != 'undefined' ) {
     return isReady;
  }

  });


 }

تحتاج إلى إرجاع القيمة داخل وظيفة رد الاتصال، وإلا فإنه سيبدأ الطلب ثم العودة مباشرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top