2016-05-14 8 views
2

私は、flickr API 1stを呼び出すWeather Webサイトを構築し、天気のためにyahoo APIを呼び出します。問題は、yahoo APIからのajax呼び出しのデータは、ページのコンテンツを読み込むために時間内にここにないということです。ajax呼び出しは同期して実行されません

私はAJAX呼び出しをダウンしようとするとスローするために使用したことのいくつか:

  • setTimeout
  • setTimeout取っ
  • でそれを包む、別の関数に$.ajax(success:)呼び出しという機能全体を包みますコールバック関数が$.ajax(success:)の外にあり、$.ajax(complete:)のパラメータを入れて
  • とすると、dataのオブジェクトは$.ajax(success:)は別のVARに、そして渡して、新しいオブジェクトをAJAX呼び出しの外に出ると$.ajaxComplete()の内部データを処理する関数を置くことで渡し、コピーvar

についてどこへ行く、私が試してみましたより多くの方法があります。これは、私はそれを3日間行っており、解決策を見つけることができません。誰かがここ

My Weather App On codeine.io

function RunCALL(url) 
    { 
     var comeBack = $.ajax({ 
     url: url, 
     async: false, 
     dataType:"jsonp", 
     crossDomain: true, 
     method: 'POST', 
     statusCode: { 
     404: function() {console.log("-4-4-4-4 WE GOT 404!");}, 
     200: function() {console.log("-2-2-2-2 WE GOT 200!");}}, 
     success: function(data){ 
     weatherAndFlickrReport(data);},                              
     error: function(e) {console.log(e);}   
    }); 
    } 
+1

いくつかのコードを表示できますか? – Pevara

+0

非同期性は、Ajaxのポイントの一種です(Aは「非同期」を表します)。すべてのロジックを成功ハンドラに入れ、ページのどの部分もAjaxがすぐに戻ってくることに依存しない場合、あなたは大丈夫です。 –

+0

コードを表示してください。 – charlietfl

答えて

0

あなたはjQueryのを使用しているプロジェクトへのリンクである、ここで私を助けてくださいことはできますか?もしそうなら、コールバックを連鎖させる必要があります。ハイレベルでどの、うのようになります。

//You might want to use .get or .getJSON, it's up to what response you're expecting... 
$.getJSON('https://example.com/api/flickr', function(response) { 
    //This your callback. The URL would end up being https://example.com/api/yahoo/?criteria=lalalalala 
    $.getJSON('https://example.com/api/yahoo/', { criteria: response.propertyYouWant}, function(yahooResponse) { 
    //Do something with your response here. 
    }); 
}); 

編集:私は今、両方示し、あなたのJSONを消費するための準備オブジェクト(AJAX要求以上に基づいて)作業溶液を使用してスニペットを更新しました。 Looky here.

+0

はい私はjQueryを使用しています。しかし、同じ$ .ajaxがflickrとyahoo呼び出しのために実行されています。私はyahooデータを取得するためにflickrデータを使用していません。その2つの別々の呼び出しは、2つのdiff要求を処理するための同じ関数です。私は、彼らがお互いに打ち勝ち過ぎないようにフラグを設定しています。なぜ私は$ .ajax()でこれを行うことができないのですか?最初にコールからデータを完全に受信してから、それを選択した機能に送信するにはどうすればよいですか?私は呼び出したのと同じ関数でデータを扱いたくありません。 – wizeOnes

+0

これは、非同期パターンの全体的な性質とコールバックの必要性です。あなたは、2つのAPI呼び出しとは別にデータを取得できることを保証することはできません(歩留まりと約束とジェネレータとその他のES6パターンについて話し始めるのでない限り、それは全く異なるテーマです)。 .ajaxと.getJSONのどちらを使用する場合でも、次のコールにチェーンするためのコールバックを実装する必要があります。次に、そのコールバックが次に発生する必要のあるものを処理します。あなたのコールバックは関数である可能性があります...インラインAJAXリクエストである必要はありません。 – napo

+0

私の実装を示すコードを投稿するのに問題があります – wizeOnes

関連する問題