【问题标题】:jQuery getJSON syntax error on a valid JSON有效 JSON 上的 jQuery getJSON 语法错误
【发布时间】:2013-08-19 22:14:57
【问题描述】:

我有以下 json 文档

// json.json
[  
   {  
      "title":"title1",
      "value":12234
   },
   {  
      "title":"title2",
      "value":"some text"
   },
   {  
      "title":"title3",
      "value":"12qwerty234"
   },
   {  
      "title":"title4",
      "value":123.5
   }
]   

我正在使用 jQuery 来加载它。代码如下:

$(document).ready(function(){
    $.getJSON("json.json", {},function(result){
        $.each(result, function(i, obj) {
            $("form").append($('<label for="'+i+'">'+obj.title+'</label>'));
            $("form").append($('<input id="'+i+'" value="'+obj.value+'" type="text"/><br>'));
        });
    });
});

我的问题是,我在 Firefox 中遇到语法错误。我将json.json 加载为本地文件。 这是一个屏幕截图(错误显示“第 1 行的语法错误”

注意,该表单已成功生成。

编辑: 这是 Chrome 运行 python SimpleHTTPServer 时的另一个屏幕截图:

【问题讨论】:

  • 错误说明了什么?
  • 没什么,只是指向了json文件的第一行。
  • 我刚刚在 Firefox (23.0.1) 上进行了测试,对我来说效果很好。您的 JSON 文件是否包含不可见字符?尝试通过从您的帖子中复制和粘贴 JSON 来重新创建 JSON 文件。
  • 您确实将该 JSON 文件保存为 UTF8 吗?

标签: jquery json ajax firefox mime-types


【解决方案1】:

我在 json 中遇到了同样的语法错误 4 问题,而我设置了正确的 json。

我无法找到解决方案,然后我使用了将 json 制作为 php 数组的技巧。 如果你觉得有用的话,你也可以使用它。

示例代码:

$json = '

{

  "title":"title4",
  "value":123.5

}';

$json = str_replace("{", "", $json); $json = str_replace("}", "", $json);

$jsonArr = explode(",", $json); $jsonArray = 数组();

foreach($jsonArr as $json){

    $jsonTmpArr = explode(":", $json);
    $jsonArray[trim($jsonTmpArr[0])] = trim($jsonTmpArr[1]);

}

print_r($jsonArray);

【讨论】:

    【解决方案2】:

    我在网络服务器上运行了相同的代码,没有产生语法错误。虽然从 file:/// 加载时会产生语法错误。所以,基本上就是“方案”。

    【讨论】:

    • 好吧,我尝试从我的目录中运行python -m SimpleHTTPServer,但没有成功。应该这样吗?
    • 是的,它应该可以正常工作。最后用 Python 2.7.3 版本对其进行了测试,并且没有出现任何错误。
    【解决方案3】:

    发生这种情况的原因是因为您使用的是本地文件,因此暗示了“text/xml”的 mime 类型,因此 Firefox 将尝试将其作为 XML 解析为底层 XHR 对象的.responseXML。这当然失败了。

    你可以忽略这个,或者自己指定mimeType

    $.ajax({
        dataType: "json",
        url: "json.json",
        mimeType: "application/json",
        success: function(result){
            $.each(result, function(i, obj) {
                $("form").append($('<label for="'+i+'">'+obj.title+'</label>'));
                $("form").append($('<input id="'+i+'" value="'+obj.value+'" type="text"/><br>'));
            });
        }
    });
    

    PS:使用普通 XHR,你会使用 overrideMimeType()

    【讨论】:

    • 在 localhost / 本地 xml 上对我来说也失败了,在 ü,ä,ö 等字符上使用 overrideMimeType("application/json; charset=UTF16")
    【解决方案4】:

    我认为,由于 json 文件是本地文件而产生的错误。尝试使用您的网络服务器加载,例如 nginx 或 apache。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 2016-10-02
      • 1970-01-01
      • 2011-02-18
      • 2013-08-26
      • 2015-02-27
      • 2015-06-13
      相关资源
      最近更新 更多