2013-03-11 6 views
0

Я пытаюсь сделать запрос, когда нажимается кнопка.getJson после getJson не работает

Если это первый щелчок по нему, я создаю 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;    
      }); 
     } 

     //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

+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 которые сразу происходит, и ваш второй требует результатов от первого. Пожалуйста, используйте событие успеха с 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> 
0

из кода посещения, мы думаем -

Это типичный случай ajax-звонка ...

, чтобы сделать второй звонок осле первый звонок, вы должны вызвать 2-й getjson в течение 1-го 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 вызывающему в различных приложениях. Надеюсь, это поможет вам.

Смежные вопросы