2013-03-11 128 views
0

我试图在单击按钮时发出请求。getJson getJson无法正常工作后

如果这是第一次点击它,我做一个getJson来获取第二个请求的ID的数组。

问题是,当它发出第一个请求时,它会在第二个请求之前停止,所以我必须再次单击以发出第二个请求。

这里是我的脚本代码:

<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> 
+0

第二个页面加载时调用,需要点击后调用它,可以将它放在函数 – 2013-03-11 19:53:45

+0

中第二个依赖于第一个,并且在点击按钮时都应该加载。感谢您的快速回复! – Artfloriani 2013-03-11 19:55:49

+0

是的,你是对的,都包含在内点击功能:) – 2013-03-11 19:56:53

回答

1

$.getJson()功能是异步的。这意味着当它执行那一段代码时,它会继续执行。第二个调用依赖于第一个,这样应该嵌套在成功回调是这样的:

$.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; 
    }); 
}); 
0

这是因为$的getJSON是一个异步事件,所以无论你的$的getJSON函数调用发生一次,而你第二要求第一个结果。从上述网站http://api.jquery.com/jQuery.getJSON/

例如:请从jQuery的使用成功事件

$.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> 
0

从您的代码访问,我们认为 -

这是一个典型的阿贾克斯案例...

使第二个电话一个压脚提升第一个呼叫,你应该叫1日的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调用不同的应用程序。希望这对你有所帮助。