jquery - 使用 jQuery 处理 JSON 数据 - 需要alert() 的奇怪结果

标签 jquery ajax json

我在下面有这个代码。我随机发现,如果我的警报消息恰好在它所在的位置,它就会起作用。如果我将其取出或移动到任何其他位置,选项卡将不会出现。

该警报究竟在做什么,可以让代码正常工作?如何在没有警报的情况下使其正常工作?

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

返回的数据非常小而且非常快,所以我认为这不是问题。

最佳答案

这是因为 Ajax 请求是异步的。它们与主脚本一起运行,并且在您执行 $.each(Projects, function(i).

时不一定完成。

显示并单击 alert() 可以为脚本提供足够的时间来获取数据,这就是为什么它看起来是这样工作的。

您需要将完整的过程放入success回调中:

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

   }

关于jquery - 使用 jQuery 处理 JSON 数据 - 需要alert() 的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3026744/

相关文章:

javascript - 滚动时的 jquery 更改菜单栏高度和 Logo

java - 向某些第三方 Web 应用程序发送登录请求

javascript - DataTables Javascript数据源 'No Data Available'

javascript - 如何使用 ajax 填充选择表单?

jquery - 在 EasyUI Combobox 中使用 Ajax 加载数据

javascript - jQuery 中的正则表达式困惑 (1.5.2)

javascript - 使用 .length 通过 concat 数组检查 JQuery 中是否存在元素

javascript - 将鼠标悬停在其他元素下方

javascript - 当另一个 div 滚出屏幕时显示一个 div。获得不需要的闪光

javascript - AJAX 成功函数中的每次点击都运行 JavaScript