我有以下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
时的另一个屏幕截图:
答案 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);