0

我有 php 脚本,它从数据库返回数据并创建一个 json 样式的文本,如下所示:

{ "company" : [ { "value" : "siemens" }, { "value" : "cocacola" } ], "order" : [ { "value" : "John" }, { "value" : "Mary" } ], "mob" : [ { "value" : "123123123" },  { "value" : "123123123" } ] }

我像这样通过jquery解析它:

    $.ajax({
        type: "POST",
        url: dir + "get_data.php", // this on gets text you can se above
        success: function(html){
            try {
                var autocomplete = $.parseJSON(html);
            }
            catch(e) {
                alert('invalid json');
                $('#content').append(html)
            }
                    }
                   })

一段时间以来,它返回“无效的 json”,尽管数据库结构或代码中的任何内容都没有改变。早些时候它工作得很好 - 非常完美!更改的所有内容都只是来自用户的新条目,因为数据将自动完成字段。我的第一个想法是用户输入了一些未正确过滤的特殊符号,即引号或大括号。我通过http://json-validator.com/http://jsonlint.com/检查了它——他们都说它是正确的 json。下一个想法是不知何故 json 文件太大而无法解析,它会解析其中的一部分。您有什么想法吗?

解决方案:

一些用户输入了混淆 json 解析的数据库制表符号。如果你有类似的问题 - 首先从它清理数据库并设置某种过滤器来输入数据。祝你好运。关闭!

4

1 回答 1

0

您可以在这里做几件事:

  1. 确保您使用的是最新版本的 jQuery。

  2. 使用 jQuery 的 AJAX 函数指定数据类型有助于查明错误。试试下面的代码:

    $.ajax({url: dir + "get_data.php", type: "json"})
        .done(function(data) {
            var autocomplete = data;
        })
        .fail(function(xhr, response, error) {
            alert('Request failed: ' + error);
            console.log('%o', xhr);
            $('#content').append(response);
        });
    

    jqXHR控制台中记录的对象和从error抛出的对象之间$.ajax,您可能能够获得一些关于解析 JSON 出错的原因的更具体的信息。

  3. 最后,检查文档jQuery.parseJSON()并确保没有换行符和制表符的问题适用于您。

于 2013-09-17T18:14:41.837 回答