2016-11-09 5 views
1

XMLHttpRequest()を使用してjsonファイルをロードする非同期要求を行っています。リクエストの完了を待ってから、残りの作業を続ける必要があります。XMLHttpRequestにajaxCompleteを適用するにはどうすればいいですか?

私はajaxComplete()がこれを行うべきであることを見ましたが、実際のコードに適用して動作させることはできません。

ここで私はここで私は今、私はそれが

を完了したことをしたい

ajaxCall(); 

その関数を呼んでいる非同期要求を経由して

function ajaxCall(){ 

    xmlhttp.onreadystatechange = function(){ 

     if(xmlhttp.readyState==4 && xmlhttp.status==200){ 
      arrayImages = JSON.parse(xmlhttp.responseText); 
      output(arrayImages); 
     } 
    } 

    xmlhttp.open("GET", url, true); 
    xmlhttp.send(); 

} 

をJSONを呼び出す関数を設定してい

do other things 

助けが必要ですか?

ありがとうございます!

+2

「ajaxCall」に「他のことをする」コールバックを受け入れるようにします。具体的な例については、[非同期呼び出しからの応答を返すにはどうすればいいですか?](http://stackoverflow.com/q/14220321/218196)を参照してください。 –

+0

* "ajaxComplete()がこれを行うべきであることがわかりました" *これはjQueryのようです。あなたはjQueryを使用していないので、あなたには当てはまりません。 –

答えて

1

2つのオプションがあります。

Promise

function ajaxCall(){ 
    return new Promise(function(success){ 
     xmlhttp.onreadystatechange = function(){ 
      if(xmlhttp.readyState==4 && xmlhttp.status==200){ 
       arrayImages = JSON.parse(xmlhttp.responseText); 
       output(arrayImages); 
       success(); 
      } 
     } 
     xmlhttp.open("GET", url, true); 
     xmlhttp.send(); 
    }); 
} 

それは

ajaxCall().then(function(){ 
    // Do stuff after 
}); 

それともあなたはコールバックを使用することができますを行うのときに、あなたがものを行うことができます...

function ajaxCall(callback){ 
    xmlhttp.onreadystatechange = function(){ 
     if(xmlhttp.readyState==4 && xmlhttp.status==200){ 
      arrayImages = JSON.parse(xmlhttp.responseText); 
      output(arrayImages); 
      callback(); 
     } 
    } 
    xmlhttp.open("GET", url, true); 
    xmlhttp.send(); 
} 

その後は、後にものを行いますこのように

ajaxCall(function(){ 
    // do stuff after 
}); 
+0

助けてくれてありがとう、 私はそれらのすべて、特に第2のものを試しましたが、機能に入りたくないです。したがって、ajaxCall()を実行しますが、コードを内部で実行しません。 ajaxCall(function(){ alert( 'Hello!'); }); – rolfo85

+0

@ rolfo85 - 関数にコールバックパラメータを追加しましたか?関数内のコールバックパラメータを呼び出しましたか?追加する必要がある場所は2つあります。更新されたコードを投稿してください。 –

1

ajaxCompleteはjQueryライブラリの一部です。 jQueryのajaxリクエストにのみバインドされます。これらは通常XMLHttpRequestをラップしますが、XMLHttpRequestを手動で使用するとXMLHttpRequestに触れることはできません。

応答が戻った後にコードを実行するには、適切なイベントを待つ必要があります。あなたはすでにここに行っている:

if(xmlhttp.readyState==4 && xmlhttp.status==200){ 

場所あなたが応答がそのif文の内部で受信された後に実行したいコード。

ajaxCallを再利用可能にする場合は、その関数に引数として渡してから、ifステートメント内でその関数を呼び出します。

関連する問題