2012-04-11 9 views
3

ループ上で一連のAjaxリクエストを作成する必要があります。約100人。各リクエストはJSONP変数を返します。私はJSONからデータを抽出し、値をdivに追加し続けます。問題は、divに関数呼び出しの順番でデータを追加したいということです。すなわち連続している。今度は、リクエストが完了する順番に応じて、ページを更新するたびに異なる注文を受け取ります。ここに私のコードです。ループ内の複数のajaxリクエストは値を順番に返しますか?

$.each(elem, function (index, item) { 

      $.ajax({ 
       type: 'post' , 
       url: moviesSearchUrl + '&q=' + encodeURI(item) + '&page_limit=1', 
       dataType: "jsonp", 
       async: false, 
       success: searchCallback 
      }); 

      function searchCallback(data) { 
       var movies = data.movies; 

       var markup = index + ': '+ movies[0].title + '<img class=" bord" src="' + movies[0].posters.thumbnail + '" /><br/>'; 

       $("div.content").append(markup); 
      } 

     }); 
}); 

私はdivの内側のインデックスの値を表示していますように、毎回私は、ランダムなオーダーを取得します。 2 4 3 1 7時には1 5 2 7 4時には。私はasyncを試みます:false。それは役に立たない。私は、JSONPをasync:falseで行うことができない場所を読んでいます。私を助けてください。

答えて

4

プレースホルダを使用できます。

$.each(elem, function (index, item) { 

      var $placeholder = $('<div>').appendTo("div.content"); 

      $.ajax({ 
       type: 'post' , 
       url: moviesSearchUrl + '&q=' + encodeURI(item) + '&page_limit=1', 
       dataType: "jsonp", 
       async: false, 
       success: searchCallback 
      }); 

      function searchCallback(data) { 
       var movies = data.movies; 

       var markup = index + ': '+ movies[0].title + '<img class=" bord" src="' + movies[0].posters.thumbnail + '" /><br/>'; 

       $placeholder.replaceWith(markup); 
      } 

     }); 
}); 
+0

私はそれを試しました、私は最初の値を取得します。 Divは他のデータに追加されません。 – Pradep

+0

申し訳ありません。私はプレースホルダー変数を宣言しませんでした。それは今すぐ順番に言葉です。しかし、私には新しい問題があります。要求の一部が失われます。私は1-25の映画を取得した後、私は巣10の値を取得しないでください、その後、私は次の10とそのようなもののために得る。私はAPIの制限に問題があると思います。それを悪く見てください。ありがとう! – Pradep

+0

あなたがトラフィックを監視できるかどうか教えてください。私たちはあなたのリクエストを抑制する方法を見つけることができるかもしれません。私は通常、ajaxレスポンスを分析するためにfirefoxのfirebugを使用します。要求していることをAPIに一回の呼び出しで統合する方法はありますか? – Sinetheta

2

ような何か:

// iterate over your set 
$.each(myset, function(i,e){ 

    // placeholder div (hidden from view until it's populated) 
    var $placeholder = $('<div>').hide().appendTo('div.content'); 

    // make your ajax call 
    $.getJSON('/link/to/resource','{date:here}',function(d){ 

    // insert the content in to the div and re-show it 
    $placeholder.text(i + ': ' + d.movies[0].title).show(); 
    }); 
}); 
4

forループを使用しないでください。再帰関数を使用してください:

var i = 1; 

function loadNext(){ 
    if (i < 5){ 
     $.ajax({ 
      type: "GET", 
      url: "results/result_html.php?usn="+i+"&resultType="+resultType, 
      dataType:"JSON", 
      success:function(result){ 
       finalResult+=result; 
       result=result+htmlMessage; 
       $("#info").hide(); 
       $("#result").html(result);    
       $("#usn").attr("placeholder", "Class USN"); 
       loadNext(); 
      } 
     }); 
     i++; 
    } 
} 
関連する問題