2013-03-11 113 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調用不同的應用程序。希望這對你有所幫助。