$.getJSON:javascript 不从上到下运行 [重复]

Posted

技术标签:

【中文标题】$.getJSON:javascript 不从上到下运行 [重复]【英文标题】:$.getJSON : javascript not run from top to bottom [duplicate] 【发布时间】:2013-12-07 17:47:40 【问题描述】:

我想解析一个 JSON 文件以填充数据表组件(由名为“datatables”的 jquery 扩展提供),但我调用的 $.getJSON 方法有一个奇怪的行为:javascript 代码似乎没有从上往下跑!

这是我的代码: 文件的标题

    <style type="text/css" title="currentStyle">
        @import "js/media/css/demo_table.css";

        #autour 
            width: 400px;
            height: 200px;
        
        #table_id 
            width: 100%;
            height: 100%;
        

    </style>

    <script src="js/media/js/jquery.js"></script>
    <script src="js/media/js/jquery.dataTables.js"></script>

    <script type="text/javascript">
        function init()
        var tab1;
        $.getJSON('test2.json', function(json) 
            alert("json:"+json.personnes.personne[0].name);
            tab1 = json;
        );

        alert("tab1:"+tab1);
        var tab2 = [];
        $.each(tab1.personnes.personne, function(index, val) 
            tab2.push([val.name, val.age]);
        );

        $(document).ready(function() 
            $('#table_id').dataTable(
                "aaData" : tab2,
                "bFilter" : false
            );
        );

    </script>

</head>
<body onload="init();">
    <!-- Une ou plusieurs balises html pour définir le contenu du document -->

    <div id="autour">
        <table id="table_id">
            <!--<thead>
                <tr>
                    <th>Column 1</th>
                    <th>Column 2</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>Row 1 Data 1</td>
                    <td>Row 1 Data 2</td>
                </tr>
                <tr>
                    <td>Row 2 Data 1</td>
                    <td>Row 2 Data 2</td>
                </tr>
            </tbody>-->
        </table>
    </div>

</body>

事实上,警报“tab2:undefined”出现在“tab1:olivier”之前(“olivier”来自 JSON 文件)。

你能帮帮我吗?

问候,

奥利弗

【问题讨论】:

它正在从上到下执行。 【参考方案1】:

@adeneo 是正确的,这是异步行为。如果您希望 getJSON 在其余代码之前运行,请将您的代码移动到成功回调中

$(document).ready(function() 
    $.getJSON('test2.json', function(json) 
        alert("json:"+json.personnes.personne[0].name);
        tab1 = json;

        alert("tab1:"+tab1);
        var tab2 = [];
        $.each(tab1.personnes.personne, function(index, val) 
            tab2.push([val.name, val.age]);
        );

        $('#table_id').dataTable(
            "aaData" : tab2,
            "bFilter" : false
        );
    );
);

还有其他方法可以做到这一点,即不使用 getJSON 快捷方式,并在 async 设置为 false 的情况下调用 AJAX:

$.ajax(
   url: 'test2.json',
   type: 'json',
   async: false,
   success: function(data)
      // assign data here
   
)

【讨论】:

谢谢大家,回答很快,把剩下的代码移到回调函数中解决了我的问题!

以上是关于$.getJSON:javascript 不从上到下运行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer打卡32-1. 从上到下打印二叉树

剑指Offer打卡32-1. 从上到下打印二叉树

剑指Offer打卡32-1.从上到下打印二叉树

剑指Offer打卡32-1.从上到下打印二叉树

剑指Offer打卡32-1.从上到下打印二叉树

javascript