VM603:1未捕获的SyntaxError:位置1的JSON中出现意外的令牌o?

时间:2016-06-20 03:19:42

标签: jquery json ajax

n.parseJSON @   jquery-1.12.3.min.js:4
showTable   @   query.html:107
success @   query.html:98
i   @   jquery-1.12.3.min.js:2
fireWith    @   jquery-1.12.3.min.js:2
y   @   jquery-1.12.3.min.js:4
c   @   jquery-1.12.3.min.js:4

以上是代码的错误信息。

我想将JSON对象解析为数组,并将数组呈现为HTML。但我不知道如何通过以下方式处理它?<​​/ p>

以下是我的部分js代码,showTable(data)函数将json对象解析为html table.function requestData()是后面的请求信息。

 (function(){
        var form = $("form");
        var contentCenter = $(".content-center");
        $(".s-btn").on("click",function(event){
            $(".container").css({
                "position":"relative"
            })
            form.css({
                "position":"absolute",
                "left":"15px",
                "top":"0px"                 
            });
            contentCenter.css({
                "position":"absolute",
                "top":"-12px"   
            })

            event.preventDefault();
            requestData();
        });

        //与后台交互数据
        function requestData(){                                 

            var data = {
                type : $("#form_control").val(),
                keywords : $.trim($("#ipt_control").val())
            };
            $.ajax({
                type : "GET",
                url : "data/data.json",
                dataType : "json",
                data : data,                    
                success:function(msg){
                    //TODO请求成功后跳转页面
                    //处理后台返回的数据
                    console.log(msg);
                    showTable(msg);
                },
                error:function(msg){
                    console.log("failed");
                }
            }); 
        }   
        //获取json数据,动态创建表格
        function showTable(data){
            var dataArray = $.parseJSON(data);
            console.log(dataArray);
            var tableStr="<table class='table table-bordered'>"
            tableStr = tableStr + "<thead><td>id</td><td>name</td>handle<td></td>"
            var len = dataArray.length;
            for(var i=0;i<len;i++){
                tableStr = tableStr + "<tr><td>" + dataArray[i].id + "</td>" + "<td>" + dataArray[i].name + "</td>" + "<td>" + dataArray[i].handle + "</td></tr>";
            }
            tableStr = tableStr + "</table>"
            $("#dataType").html(tableStr);
        }       
    })();

3 个答案:

答案 0 :(得分:8)

我有同样的问题,如果您的响应标头是application / json,它已经被解析,您不需要用以下方法解析它:

var dataArray = $.parseJSON(data);

另外,您可以使用jQuery.getJSON()jQuery.getJSON()

来获取它

答案 1 :(得分:2)

在你的ajax请求中,你应该将dataType指定为&#34; html&#34;。其中:数据是由php json_encode()函数生成的。

 $.ajax({
            type : "GET",
            url : "data/data.json",
            dataType : "html",
            data : data,                    
            success:function(msg){
                console.log(msg);
                var array_return =  $.parseJSON ( msg );
            },
            error:function(msg){
                console.log("failed");
            }
        }); 

答案 2 :(得分:-1)

因此,这是javascript或唯一的v8的技巧。

JSON.parse函数,主要用于jquery的$ .parseJSON(data)中。始终假定以'引号开头的字符串。

因此,如果您的数据如下所示

let data = '{"hello": "world"}'; //success let data = "{'hello': 'world'}"; //fail

使用单引号将按预期方式工作,否则将失败并显示Unexpected token o in JSON at position 1?

希望有帮助:)