5

ループで一連の Ajax リクエストを作成する必要があります。それらの約100。そして、各リクエストは JSONP 変数を返します。JSON からデータを抽出し、値を div に追加し続けます。問題は、関数呼び出しの順序で div にデータを追加することです。つまり、順番に。リクエストが完了する順序に応じて、ページを更新するたびに異なる順序になります。これが私のコードです。

  $.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 を試します。それは役に立ちません。async: false では JSONP を実行できないことをどこかで読みました。私を助けてください。

4

4 に答える 4

9

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++;
    }
}
于 2013-12-21T06:39:55.747 に答える
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);
            }

        });
});
于 2012-04-11T02:01:27.140 に答える
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();
  });
});
于 2012-04-11T02:05:49.257 に答える