【问题标题】:Appending JSON data to ListView将 JSON 数据附加到 ListView
【发布时间】:2013-03-31 00:31:18
【问题描述】:

我正在尝试附加以下 JSON 数据:

[
  {
    "idfruits": "1",
    "fruit": "Apple"
  },
  {
    "idfruits": "2",
    "fruit": "Orange"
  },
  {
    "idfruits": "3",
    "fruit": "Banana"
  },
  {
    "idfruits": "4",
    "fruit": "Raspberry"
  },
  {
    "idfruits": "5",
    "fruit": "Coconut"
  }
]

使用以下代码:

<script type="text/javascript">
    $(function () {
        jQuery.ajax({
            url: "index.php",
            type: "POST",
            dataype: "json",
            async: false,
            success: function (data) {
                console.log(data);
                var items = [];
                $.each(data, function (key, fruit_info) {
                    items.push('<li id="fruit_' + fruit_info.idfruits + '">' + fruit_info.fruit + '</li>');
                });

                $(items.join('')).appendTo('#listy');
            }
        });
    });
</script>

不幸的是,代码给出了以下错误:

TypeError: invalid 'in' operand obj
typeof length === "number" && length > 0 && ( length - 1 ) in obj );

我的目标是创建一个 通用 方法,该方法始终将第一个 JSON 值解析为 key,第二个解析为 val
这可能吗?

【问题讨论】:

  • 你返回的JSON是什么样的,你可以使用fiddler轻松查看。我看到你放了一些,但它实际上是返回的吗?
  • &lt;script&gt; 需要一种语言。 &lt;script type="text/javascript"&gt;
  • @JoeFrambach,我已更正此问题。

标签: jquery json


【解决方案1】:

我相信你想使用fruit 而不是value

试试这个

 $.each(data, function(key, val) {
        items.push('<li id="' + this.fruit+ '">' + this.fruit + '</li>');
  });

【讨论】:

  • 所以我不能避免使用实际名称?有没有机会我可以使它通用,以便第一个值始终是key,第二个值在{"idfruits":"1","fruit":"Apple"} 中开始val
  • 您可以通过在 JSON 对象中传递 keyName 并使用 this[keyName] 来做到这一点。
【解决方案2】:

没有。 ECMAScript 指定哈希行为如下:http://bclary.com/2004/11/07/#a-8.6

对象是属性的无序集合。每个属性都由一个名称、一个值和一组属性组成。

你不能假设给定一个像{"idfruits":"1","fruit":"Apple"} 这样的散列,id 将是第一个,而fruit 将是第二个。您需要直呼他们的名字。

顺便说一句,这个问题问得非常好。

做你想做的事:

<script type="text/javascript">
$(function () {
    jQuery.ajax({
        url: "index.php",
        type: "POST",
        dataype: "json",
        async: false,
        success: function (data) {
            console.log(data);
            var items = [];
            $.each(data, function (key, fruit_info) {
                items.push('<li id="fruit_' + fruit_info.idfruits + '">' + fruit_info.fruit + '</li>');
            });

            $(items.join('')).appendTo('#listy');
        }
    });
});
</script>

【讨论】:

  • 我明白了。但是我如何访问数据?
  • @JavaCake 术语“密钥”有点误导。这实际上是正在处理的数组中当前元素的索引。
  • @贾斯汀 +1。如果该变量不会用于任何用途,我喜欢将其称为 i
  • 您还需要定义items。我已经更新了应该去的地方。
  • @JoeFrambach,我已经进行了所有更正,但仍然出现同样的错误。
猜你喜欢
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 2018-12-20
相关资源
最近更新 更多