【问题标题】:Ok, I really don't get on with JSON stuff?好吧,我真的不喜欢 JSON 的东西?
【发布时间】:2011-11-14 20:07:43
【问题描述】:

我已经设法从我的数据库中获取一个 JSON 输出以用于 jQuery UI AutoComplete,并且工作正常。

问题在于,AutoComoplete 插件似乎为我完成了所有 JSON 数据的解析,所以我仍然要弄清楚它是如何完成的。

我有一个 URL,http://test.hartnollguitars.co.uk/jsonOut/products.aspx?term=761294042656&barcode=yes(作为示例),它为我提供了来自与自动完成相同的 JSON 输出的单个记录,我正在尝试将此单个记录输出用于单个案例。

所以我一直在谷歌上搜索并弄乱 jQuery getJSON,但我似乎无法获取信息。

$.getJSON("jsonOut/products.aspx?barcode=yes", function () { alert(data.label);  });

这就是我现在所处的位置,我知道这是错误的,并且我已经按照 jQuery 站点中的示例尝试了此代码的各种其他排列,但我无法获得所需的输出。

这显然是因为我不知道我在做什么,但是有人可以解释一下你是怎么做的吗:

  1. 像这样从单个记录中获取数据
  2. 从一系列数据中获取数据并循环显示输出(例如,来自 Facebook Graph 的 FQL 输出,用于事件等简单对象)

非常感谢所有帮助!

【问题讨论】:

  • 您确定正在传输数据吗? Firebug 或 Chrome 或 IE 的开发者工具可以帮助您确定。
  • 你们提供 JSON 数据吗?如果是这样,为什么要添加括号?只需使用{"label":"Boss TR-2 Tremolo Pedal","price":79,"id":1287}。工作方式相同,可能会解决您的第一个问题。使用括号你可以开始一个数组,但是如果你只有一个条目,为什么要这样做呢?
  • 知道了...我认为这与方括号有关,但它们是相关的,它也用于多个结果查询。

标签: jquery json getjson


【解决方案1】:

data 不是凭空而来,它是你成功函数的参数

$.getJSON(
     "jsonOut/products.aspx?barcode=yes", 
     function (data) { 
         alert(data.label);  
});

然后你输出一个数组

[
   {
        "label": "Boss TR-2 Tremolo Pedal",
        "price": 79,
        "id": 1287
    }
]

这就是“[]”分支所代表的意思,因此您的数据可以通过其他方式访问

data[0].label

请考虑在Firefox中开发并使用FireBug,然后您可以编写

console.log(data);

而不是 alert(),它可以让您更深入地了解您的对象。

【讨论】:

  • 哦,太好了。我从未使用过console.log,但我会尝试一下。我确实使用 Firefox/Firebug 和 Chrome 开发工具,我发现它们各有利弊。通常 Firebug 会胜出,但 Chrome 中的开发人员工具有几个不错的功能。
  • 太好了,console.log 也可以在 chrome 中运行——但我个人更喜欢 Firebug(一直)。
【解决方案2】:

我查看了您的 JSON 输出: [{"label":"Boss TR-2 Tremolo Pedal","price":79,"id":1287}]

问题是,您的代码输出了一个对象列表。 请改用data[0].label

【讨论】:

  • 就是这样,谢谢。我认为这与方括号有关,但它们是相关的,它也用于多个结果查询。
  • 没有问题。给你一点建议:如果你使用 Firebug,你可以使用 Firebug 控制台简单地将你的 JSON 粘贴到 Firebug 中。示例:data = {"a":"b"} 如果你输入 data["a"] 则输出b;)
【解决方案3】:

请记住使用绝对网址,而不是相对网址。您粘贴的代码会将 url 附加到当前目录,因此它仅在来自 / 时才有效。 返回的 JSON 是一个数组,因此您必须取消引用一个元素:

$.getJSON("/jsonOut/products.aspx?barcode=yes", function (data) { alert(data[0].label);  });

或者更有用的做法是:

$.getJSON("/jsonOut/products.aspx?barcode=yes", function (data) {
   for (var i = 0; i < data.length; ++i) {
      alert(data[i].label);
   }
});

【讨论】:

  • 我不得不接受这个答案,因为它也给了我数据循环。没有冒犯所有其他出色的答案! :D
猜你喜欢
  • 2011-09-09
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 2010-12-08
  • 2015-11-20
  • 2016-11-08
  • 2011-06-24
  • 2016-07-19
相关资源
最近更新 更多