有效JSON上的jQuery getJSON语法错误

时间:2013-08-17 17:13:51

标签: jquery json ajax firefox mime-types

我有以下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行的语法错误”

enter image description here

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

修改: 以下是Chrome运行python SimpleHTTPServer时的另一个屏幕截图:

enter image description here

4 个答案:

答案 0 :(得分:26)

发生这种情况的原因是因为您使用的是本地文件,因此暗示了mime类型的“text / xml”,因此Firefox会尝试将其解析为基础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()

答案 1 :(得分:4)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

示例代码:

$json = '

{

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

}';

$ json = str_replace(“ {”,“”,$ json);    $ json = str_replace(“}”,“”,$ json);

$ jsonArr = explode(“,”,$ json);    $ jsonArray = array();

foreach($ jsonArr as $ json){

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

}

print_r($ jsonArray);