有效JSON上的jQuery getJSON语法错误

vxbzzdmp  于 2023-02-21  发布在  jQuery
关注(0)|答案(4)|浏览(267)

我有下面的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时的另一个截图:

mccptt67

mccptt671#

发生这种情况的原因是因为您使用的是本地文件,因此隐含了mime类型“text/xml”,因此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()

bkhjykvo

bkhjykvo2#

我在一个Web服务器上运行了同样的代码,没有产生语法错误,但是当从file:///加载时会产生语法错误。

tvmytwxo

tvmytwxo3#

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

72qzrwbm

72qzrwbm4#

我在json中遇到了同样的语法错误4的问题,而我有正确的json集。
我无法找到解决方案,然后我用了一个技巧,使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);

相关问题