どのようには、Ajaxの状態のためのスクリプトの待ち時間が続行する前に、要求を取得するのですか?

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

  •  19-09-2019
  •  | 
  •  

質問

それが見つからない場合は、

基本的に私がやっていることは、物体の存在をチェックされ、スクリプトがgetScriptを使用して、ソースファイルをロードしようとします。私はその後、フェッチ関数呼び出しにtrueまたはfalseを返す一度かかわらず、これを確認したい()

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

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

   });

   return isReady;

   }

が、スクリプトの前にキックを返す負荷= /

以降のスクリプトがロードされますが、関数がfalseを返されます。

これは...私が思う非同期の美しさです。

オブジェクトが存在する場合はたぶん私はいくつかの他の地点で再びチェックすることができます...これを処理するための最良の方法は何ですか?

それとも私が潜在的にブラウザをロックするために持っていけないところ、これを行うには良い方法があります?

役に立ちましたか?

解決

あなたのコードの組織から、私はあなたのメソッドを格納するオブジェクトを使用している推測しています。

:そうなら、あなたはこのようにカスタムイベントを使用することができます
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がfalseください。

  

デフォルトでは、すべての要求が(すなわち、これはデフォルトでtrueに設定されている)非同期送信されます。あなたが同期要求が必要な場合は、このオプションをfalseに設定します。同期要求を一時的に要求がアクティブである間に、任意のアクションを無効にする、ブラウザをロックすることができることに留意されたい。

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