0

基本的に私がしているのは、オブジェクトの存在をチェックすることです。オブジェクトが見つからない場合、スクリプトはgetScriptを使用してソースファイルをロードしようとします。これを一度だけチェックしたいのですが、fetch()を呼び出す関数にtrueまたはfalseを返します

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

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

   });

   return isReady;

   }

ただし、スクリプトがロードされる前にリターンが開始されます= /

後でスクリプトがロードされますが、関数はfalseを返しました。

これが非同期の美しさだと思います...

これを処理するための最良の方法は何ですか...オブジェクトが存在するかどうかを別の時点でもう一度確認できるかもしれません。

または、ブラウザをロックする必要がない場合に、これを行うためのより良い方法があるのでしょうか。

4

3 に答える 3

1

コードの編成から、メソッドを含めるためにオブジェクトを使用していると思います。その場合、次のようなカスタム イベントを使用できます。

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);
于 2010-03-12T13:34:29.463 に答える
0

jQuery.ajax()を参照してください:asyncfalseにします。

デフォルトでは、すべてのリクエストは非同期で送信されます(つまり、これはデフォルトでtrueに設定されています)。同期リクエストが必要な場合は、このオプションをfalseに設定してください。同期リクエストはブラウザを一時的にロックし、リクエストがアクティブな間はアクションを無効にする可能性があることに注意してください。

于 2010-03-12T09:22:41.053 に答える
0
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;
  }

  });


 }

コールバック関数内で値を返す必要があります。そうしないと、リクエストが開始されてすぐに返されます。

于 2010-03-12T09:27:33.370 に答える