Обработка данных JSON с помощью jQuery - странные результаты, требующие оповещения () - PullRequest
2 голосов
/ 12 июня 2010

У меня есть этот код ниже.Я случайно натолкнулся на то, что это сработает, если у меня будет именно то оповещение, где оно находится.Если я достану его или переместу в другое место, вкладки не появятся.

Что именно делает это оповещение, которое позволяет коду работать, и как я могу заставить его работать без оповещения?

$.ajax({
   type: "GET",
   url: "../ajax.php",
   data: "action=tabs",
   dataType: "json",
   success: function(Projects){
     $.each(Projects, function(i){

        /* Sequentially creating the tabs and assigning a color from the array: */
        var tmp = $('<li><a href="#" class="tab green">'+Projects[i].name+'<span class="left" /><span class="right" /></a></li>');

        /* Setting the page data for each hyperlink: */
        tmp.find('a').data('page','../ajax.php?action=lists&projectID='+Projects[i].project_id);

        /* Adding the tab to the UL container: */
        $('ul.tabContainer').append(tmp);

    });
   }
 });
    alert("yes");

Код ajax повторно настраивает JSON с этим кодом

        $query = mysql_query("SELECT * FROM `projects` ORDER BY `position` ASC");

    $projects = array();

    // Filling the $projects array with new project objects:

    while($row = mysql_fetch_assoc($query)){
        $projects[] = $row;
    }

    echo json_encode($projects);

Возвращаемые данные очень маленькие и очень быстрые, поэтому я не думаю, что это проблема.

Ответы [ 2 ]

3 голосов
/ 12 июня 2010

Это потому, что запросы Ajax Асинхронные . Они запускаются вместе с основным сценарием и не обязательно завершаются, когда вы выполняете $.each(Projects, function(i).

Отображение и нажатие alert() дает сценарию достаточно времени для извлечения данных, поэтому, похоже, он работает таким образом.

Вы должны поместить всю процедуру в обратный вызов success:

 success: function(data){
       Projects = data; 
       $.each(Projects, function(i){
         ........... // do all the stuff

   }
2 голосов
/ 12 июня 2010

AJAX является асинхронным! таким образом, обработчик успеха ajax-запроса будет выполнен ПОСЛЕ остальной части вашего кода. Добавляя alert (), вы блокируете свой код достаточно долго, чтобы обработчик успеха выполнялся. Просто переместите код в обработчик, который вы сделали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...