【问题标题】:json selecting an item named "item"json选择一个名为“item”的项目
【发布时间】:2010-01-13 03:59:23
【问题描述】:

我正在尝试处理 rss 提要的 json 版本,但我需要访问标有“data.channel.item”的数组。我怀疑是因为这个名称似乎与 javascript 中的保留字 item 冲突,所以该脚本仅适用于这个特定的 json 文件。它在其他情况下确实有效。

有没有办法使用“项目”但以某种方式逃避它? (是的,我是 javascript 新手)

这是脚本(jquery)

 <script>
  $(document).ready(function(){
    $.getJSON("http://example.com/jsonBuzz.php?callback=?",
        function(data){
          $.each(data.channel.item, function(i,item){
            $("#results").append('<li><h1>'+item.title+'</h1></li>');
          });
        });
  });

  </script>

json的删减版:

{"@attributes":{"version":"2.0"},"channel":{"lastBuildDate":"Mon, 11 Jan 2010... ..."generator":"Blogger","item":[{"guid":"tag:blogger.com,...

【问题讨论】:

  • 你能详细说明“不起作用吗?”
  • 是的,抛出的具体错误是什么,它在哪一行失败?
  • html 页面显示在#results 节点中没有任何内容。同样,当我尝试使用其他提要时,它可以工作。至于它在哪一行失败,我不知道任何用于调试 javascript 的工具。 (我说我是新手)我习惯了php、html、xml和css。 Javascript对我来说是新的。我尝试了围绕“item”和“data.channel.item”的双引号以及带和不带引号的方括号。没有变化。

标签: javascript jquery json


【解决方案1】:

将键放在双引号中将允许您使用保留字——事实上,它必须是有效的 JSON(请参阅http://json.org/)。但是,这并不是真正的问题,因为“item”不是 JavaScript 中的保留字(请参阅 https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Reserved_Words 作为一种可能的参考)。

您得到的是item:title,而不是item.titleitem["title"],这两种方法都是访问对象属性的正确方法。

【讨论】:

  • 好的,感谢保留字列表。确实,项目不在其中。然而,我的代码编辑器加粗了这个词,所以我认为它一定有什么特别之处。我做了您建议的其他更改,但仍然无效。就像我说的,我知道这个脚本适用于其他 json。我正在编辑我的原始帖子以修复“:”错字。
  • 您使用的是哪个代码编辑器? item 通常是 Collection 对象的成员,但这肯定不会使其保留,js 代码编辑器也不应该突出显示该词。
  • 我在使用 Dreamweaver MX 2004 时看到了这一点。
【解决方案2】:

记录在案:事实证明,问题不在于 javascript 代码。受 cmets 中的一个问题 (Andy E) 的启发,我发现了如何捕获 javascript 错误并确定 json 没有正确括在括号中或以“;”结尾。

这是一个 PHP 问题。 PHP 有一个有用的函数json_encode 将 PHP 对象转换为 json。

但是,作为 json 的新手,我认为它已经可以使用了。我几乎不知道它需要被包裹在几个额外的字符中。我修改了代码,现在可以按计划运行。

以下是其他人可能会觉得有用的 PHP 代码。这是我在第一篇文章中通过 jquery $.getJSON 检索的 php 文件:

<?php
header('Content-Type: text/javascript; charset=utf8');
header('Access-Control-Allow-Origin: http://www.example.com/');
header('Access-Control-Max-Age: 3628800');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');

$file='rss.xml';
$arr = simplexml_load_file($file);//this creates an object from the xml file
$json= '('.json_encode($arr).');'; //must wrap in parens and end with semicolon
print_r($_GET['callback'].$json); //callback is prepended for json-p
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    相关资源
    最近更新 更多