【问题标题】:Reading JSON data (created by PHP) via jQuery Ajax results in "parserror"通过 jQuery Ajax 读取 JSON 数据(由 PHP 创建)会导致“parsererror”
【发布时间】:2013-07-25 12:51:13
【问题描述】:

我使用以下 php 代码创建 JSON 数据:

if($res =  $db->query('Select row1 from table1')){
    while($row = $res->fetch_row()){
        $json[] = $row;
    }
}
sort ($json);
$json = json_encode($json);
echo $json;

结果是[["1"],["2"],["3"]]
当我尝试使用 jquery ajax 获取这些数据时

<div id="output">JSON will be put here</div>
<script language="javascript" type="text/javascript">
    $(function ()   {
    $.ajax({
                url: 'json.php',
                dataType: 'json',
                data: '', 
                error: function(request,error) {
                            alert(error);
                            },
                success: function(data) {
                    var json = data[0];
                    alert(json);
                    $('#output').html(json+", ");
                    }
                });
            });

它说:“parseerror”。
我搜索了很多(在 Stack Overflow),但我的 jQuery 版本似乎是正确的(1.7.2)并且重新格式化 JSON-outpu 并没有帮助(我删除了左括号并尝试了很多其他的东西)。
有什么想法吗?

【问题讨论】:

  • 您确定页面上没有其他输出吗?我敢打赌有。
  • $.parseJSON( data );
  • “结果是[["1"],["2"],["3"]] - 你是怎么确定的?
  • 我尝试解析该字符串并且它有效。你确定那是你的 php CGI 返回的字符串吗?你不是缺少响应头吗?
  • 如果我使用 php 代码直接访问该网站,它将返回 [["1"],["2"],["3"]]。但是,如果我随后使用 ajax JSON 调用打开页面,它不会替换输出 div 并发送错误消息。我不确定它是否是正确的 JSON sythax,但我使用 JSONLint 进行了验证,并了解到 php 创建了一个 JSON 数组。

标签: php jquery ajax json parse-error


【解决方案1】:

在ajax结果中解析数据返回,

var retData= JSON.parse(data);

【讨论】:

  • 如果指定了 dataType: 'json' 则不必这样做。
  • 我也有错误。 dataType 似乎有时不会生效:(
【解决方案2】:

你应该在使用它之前检查你是否得到了一个对象:

if(typeof data != 'object')
    data = $.parseJSON(data);

有时它被解释为一个字符串,你必须先转换它

【讨论】:

  • OP 说他们得到“parseerror”。这是否意味着 jQuery 在调用函数之前尝试解析字符串?
【解决方案3】:

我认为您不需要将其推送到数组中。您的查询已经是一个数组。所以尝试只使用 json_encode() 并提醒数据你得到什么并尝试使用 data.somevariable 访问数据(至少这是我在 ajax 中访问我的 json 数据的方式)。

希望对你有帮助

【讨论】:

  • 你能解释一下这个更实际一点吗?
  • 嗯,您从数据库中获得的 $row 数据已经是一个数组。我看不出你应该将它插入另一个数组的原因。然后你 json_encode($row) 然后尝试用 ajax 读回它。首先,您发出警报,以便查看您获得的结构。例如,在 table1 中,您有一个名为 name 的字段。您将获得带有 data.name 的名称。我希望我足够清楚
  • 您正在从数据库中选择 row1。 if($res = $db->query('从 table1 中选择 row1')){ while($row = $res->fetch_row()){ $json[] = $row; --> 不要使用这个 } } 只需使用 $row= $res->fetch_row();然后 json_encode($row);并尝试访问您的数据。
  • 好吧,那我是对的。我已经尝试过了,但这样我只能得到行 ["1"] 的第一个值。
  • 那么看看你查询返回什么。据我所知,您可以通过这种方式访问​​ json 数据——> data.VARIABLENAME 不像您使用 data[1] 访问数组。
【解决方案4】:

验证响应标头的内容类型(您可以在任何现代浏览器的网络控制台中看到这一点)。它需要以 application/json 的形式返回。任何其他类型都可能导致您的 Javascript 失败。在您的 PHP 文件中回显 JSON 之前,请尝试添加:

header('Content-Type: application/json');

这将明确且正确地设置响应内容类型。请记住,这取决于您的返回字符串首先是有效的 JSON,这似乎是。

【讨论】:

    猜你喜欢
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    相关资源
    最近更新 更多