【问题标题】:Javascript - Using a variable to get a piece of an arrayJavascript - 使用变量获取数组的一部分
【发布时间】:2013-08-24 03:17:02
【问题描述】:

我目前正在开发一个连接到 CGI 后端的网页。到目前为止,CGI 后端运行良好,但我不太了解 JavaScript,所以我很难从 AJAX JSON 请求中获取结果。

我有什么:

JavaScript 函数查询 CGI。

CGI 在 JSON 数组中响应。

    {
    "ARRAY": [
        {
            "line": "1",
            "numbers": "12321",
            "var": "12321",
            "var2": "12321"
        },
        {
            "line": "2",
            "numbers": "-1",
            "var": "12320",
            "var2": "6160"
        }
    ]
}

line、numbers、var 和 var2 都必须放在表格的不同单元格中。

<table>
<tr>
<th>line</th><th>numbers</th><th>var</th><th>var2</th>
</tr>
<tr>
<td>ARRAY[0].line</td><td>ARRAY[0].numbers</td><td>ARRAY[0].var</td><td>ARRAY[0].var2</td>
</tr>
<tr>
<td>ARRAY[1].line</td><td>ARRAY[1].numbers</td><td>ARRAY[1].var</td><td>ARRAY[1].var2</td>
</tr>
</table>

所以,这是我的问题:

我永远不知道数组中有多少对象。这里有 2 个,但有时可能有 20 个。如果需要,我可以修改我的 JSON。我如何让它循环直到它碰到最后一个对象?

【问题讨论】:

    标签: javascript arrays json loops cgi


    【解决方案1】:

    有几种不同的方法。传统的方法是使用简单的 for 循环:

    for (var i = 0, len = ARRAY.length; i < len; i++) {
        //Build table row using ARRAY[i].line, etc
    }
    

    不久前我们得到了 Array.forEach,只要您不必支持旧版本的 IE 就可以正常工作(您也可以对其进行 polyfill):

    ARRAY.forEach (function (idx, elt) {
        //Build table row using elt.line, etc
    });
    

    如果你使用 jQuery,还有 $.each:

    $.each(ARRAY, function (idx, elt) {
        //Build table row using elt.line, etc
    });
    

    这是一个更完整的示例,说明您需要什么,使用 jQuery 库(不是必需的,但可以让事情变得更简单):

    var url = '/cgi-bin/your_script_name.cgi';
    var html = '<table><tr><th>line</th><th>numbers</th><th>var</th><th>var2</th></tr>';
    $.get(url, function (response) {
        $.each(response.ARRAY, function (idx, elt) {
            html += '<tr><td>' + elt.line + '</td><td>' + elt.numbers + '</td><td>' + elt.var + '</td><td>' + elt.var2 + '</td></tr>';
        });
        html += '</table>';
        $('#target-element').html(html);
    });
    

    在本例中,您将表格放入 id 为 target-element 的元素中,并且您的 cgi 脚本位于 /cgi-bin/your_script_name.cgi。如果不能使用 jQuery,则需要手动创建 XMLHttpRequest,将其 responseType 设置为 'json',并将函数绑定到 onload(或者如果支持旧浏览器,则 onreadystatechange 然后检查readyState === 4)。希望对您有所帮助。

    【讨论】:

    • 这会解析 JSON 吗?
    • 是的。感谢您指出我使用 for..in 的缺陷,Nathan。我刚刚花了一些时间阅读了差异(我假设没有差异)以及为什么要将数组的长度分配给变量以提高性能。
    • @zggz12 — JSON 是 JavaScript 对象表示法,这基本上意味着当您在 JavaScript 中使用 JSON 时,它只是一个常规对象。因此,如果您使用例如jQuery.get(),不需要解析。您只需像任何其他 JavaScript 对象一样与数据交互,就可以开始了。 @Trendy — 很高兴我能帮上忙 :)
    • JSON 本身是一个普通的字符串(Object Notation),而不是一个对象。因此,如果您使用的是原生 JavaScript,那么您首先需要使用 JSON.parse()(或旧浏览器中的 eval())将 JSON string 转换为 JS 对象。因此,您的前 3 个示例将无法按原样工作。但是,jQuery 的 get() 会自动解析响应(JSON 字符串到 JavaScript 对象),只要响应发送时带有正确的标头。
    • @w3d — 是的,我可能过于简单化了。问题是“如何遍历数组”,所以我认为详细介绍 JSON 解析不太可能有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2013-01-13
    • 1970-01-01
    • 2011-02-04
    • 2013-10-27
    • 1970-01-01
    相关资源
    最近更新 更多