6 votes

VM603:1 Erreur de syntaxe non détectée : Unxpected token o in JSON at position 1 ?

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

Ci-dessus se trouve l'info d'erreur du code.

Je veux analyser l'objet JSON en tableau, et rendre le tableau dans le HTML. Mais je ne sais pas comment le gérer de la manière suivante ?

Voici une partie de mon code js, la fonction showTable(data) analyse l'objet json en table html, la fonction requestData() demande des informations à l'arrière.

 (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);
        }       
    })();

10voto

Danielle Davis Points 81

J'ai eu le même problème, si votre en-tête de réponse est application/json, il est déjà analysé, vous n'avez pas besoin de l'analyser avec :

var dataArray = $.parseJSON(data);

Vous pouvez également l'obtenir avec jQuery.getJSON() : jQuery.getJSON()

4voto

Dans votre requête ajax, vous devez spécifier que le type de données est "html". Entre autres : lorsque les données sont générées par la fonction 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");
            }
        });

0voto

Waheedi Points 156

Voici donc l'astuce avec l'analyseur JSON

Fonction JSON.parse qui est principalement utilisée dans $.parseJSON(data) de jquery. Elle supposera toujours une chaîne commençant par ' un guillemet simple.

Ainsi, si vos données ressemblent à ceci

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

et ensuite

JSON.parse(ok);
JSON.parse(fail);

Avec un guillemet simple, il fonctionnera comme prévu, sinon il échouera avec la mention Unexpected token o in JSON at position 1? et la raison est que les guillemets simples (') ne sont pas autorisés dans JSON comme l'explique safari.

J'espère que cela vous aidera :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X