0

ボタンがクリックされたときにリクエストをしようとしています。

初めてクリックする場合は、getJson を作成して、2 番目のリクエストの ID を含む配列を取得します。

問題は、最初のリクエストを行うと、2 番目のリクエストの直前に停止するため、2 番目のリクエストを行うにはもう一度クリックする必要があることです。

ここに私のスクリプトコードがあります:

<script  type="text/javascript">
$(document).ready(function() {
    var IDs = new Array();
    var iterator = 0;
    // When id with Action is clicked
    $("#Action").click(function() {
        if(IDs.length <= 0){
            // Load generator.php as JSON and assign to the data variable
            $.getJSON('generator.php', {tags : "lol"},  function(data) {
                IDs = data.value;               
            });
        }

        //PAGE STOPS HERE

        $.getJSON('imagem.php', {ids : IDs[iterator]}, function(data) {
            iterator++;
            document.title = "IMG2";

            $("#Imagem").html(data.value);  
            if(iterator > IDs.length-1)
                iterator = 0;
        });

    });
});
</script>
4

3 に答える 3

1

$.getJson()関数は非同期です。これは、そのコードを実行すると、実行を継続することを意味します。2番目の呼び出しは最初の呼び出しに依存するため、次のように成功コールバックにネストする必要があります。

$.getJSON('generator.php', {tags : "lol"},  function(data) {
   IDs = data.value;               

   $.getJSON('imagem.php', {ids : IDs[iterator]}, function(data) {
      iterator++;
      document.title = "IMG2";

      $("#Imagem").html(data.value);  
      if(iterator > IDs.length-1)
         iterator = 0;
   });
});
于 2013-03-11T19:57:28.363 に答える
0

あなたのコード訪問から、私たちは考えます -

ajax呼び出しの典型的なケースですが……

最初の呼び出しの後に2番目の呼び出しを行うには、最初のgetjsonコールバック内で2番目のgetjsonを呼び出して、これを機能させる必要があります-つまり-

<script  type="text/javascript">
                $(document).ready(function() {
                    var IDs = new Array();
                    var iterator = 0;
                    // When id with Action is clicked
                    $("#Action").click(function() {
                        if(IDs.length <= 0){
                        // Load generator.php as JSON and assign to the data variable
                        $.getJSON('generator.php', {tags : "lol"},  function(data) {
                            IDs = data.value;               
                            $.getJSON('imagem.php', {ids : IDs[iterator]}, function(data) {
                            iterator++;
                            document.title = "IMG2";

                            $("#Imagem").html(data.value);  
                            if(iterator > IDs.length-1)
                                    iterator = 0;
                        });


                        });
                        }
                    });
                });
            </script>

さまざまなアプリケーションで ajax を呼び出すために、以前に同じ状況に直面したことがあります。これがお役に立てば幸いです。

于 2013-03-11T20:00:37.683 に答える
0

これは、$getJSON が非同期イベントであるため、両方の $getJSON 関数呼び出しが同時に発生し、2 番目は最初の結果を必要とするためです。jquery の成功イベントを使用してください: http://api.jquery.com/jQuery.getJSON/

上記のウェブサイトの例:

$.getJSON("example.json", function() {
  alert("success");
})
.success(function() { alert("second success"); });

新しいコード:

<script  type="text/javascript">
    $(document).ready(function() {
        var IDs = new Array();
        var iterator = 0;
        // When id with Action is clicked
        $("#Action").click(function() {
            if(IDs.length <= 0){
                // Load generator.php as JSON and assign to the data variable
                $.getJSON('generator.php', {tags : "lol"},  function(data) {
                    IDs = data.value;
                }).success(function() {
                    $.getJSON('imagem.php', {ids : IDs[iterator]}, function(data) {
                        iterator++;
                        document.title = "IMG2";

                        $("#Imagem").html(data.value);  
                        if(iterator > IDs.length-1)
                                iterator = 0;
                    });
                });
            }
        });
    });
</script>
于 2013-03-11T19:59:05.887 に答える