通过jQueryAjax读取JSON数据(由PHP创建)导致“;parseerror”;


Reading JSON data (created by PHP) via jQuery Ajax results in "parserror"

我使用以下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输出也没有帮助(我删除了左括号,并尝试了很多其他事情)
有什么想法吗?

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

var retData= JSON.parse(data);

在使用之前,您应该检查是否获得了对象:

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

有时它被解释为一个字符串,您必须首先将其转换为

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

希望它能帮助

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

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

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