用php返回json数据

时间:2016-06-20 00:12:54

标签: php json

我想返回json数据,但我的代码无效。我没有收到任何错误消息。我有index.php,ajax.php和db.php。 Db.php正在工作。但我的ajax代码无效。我的错误在哪里?

的index.php:

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
</head>
<body>
    <div id="test" style="width:500px;height:400px; margin:20px auto;"></div>
<script>
    $(window).load(function () {
        $.ajax({
            dataType: "json",
            url: 'ajax.php',
            success:function(data){         
                $("#test").html(data);
            }
        });
    });
</script>
</body>
</html>      

Ajax.php:

<?php
require 'db.php';
$query="select lat,lng from locations order by id";
$result = pg_query($link, $query);
if (!$result) {
echo "An error occurred_xxx.\n";
}else {
$arr = pg_fetch_all($result);
echo json_encode($arr);
}  ?>

1 个答案:

答案 0 :(得分:7)

如果您期待JSON,则无论如何都需要发送它。当您的脚本出错时,您正在发送的内容是text/html。试试这个:

header("Content-Type: application/json");
require 'db.php';
$query="select lat,lng from locations order by id";
$result = pg_query($link, $query);
$response = array();
if (!$result) {
    $response = array(
        'status' => false,
        'message' => 'An error occured...'
    );
}else {
    $response = array(
        'status' => true,
        'message' => 'Success',
        'data' => ph_fetch_all($result)
    );
}

echo json_encode($response);

现在您将看到,我们通过设置正确的Content-Type标头并且不将纯文本和json混合起来发送实际的JSON。

要在jQuery中处理此响应,只需调整响应:

$(window).load(function () {
    $.ajax({
        dataType: "json",
        url: 'ajax.php',
        success:function(data){         
            if(!data.status) {
                $("#test").html("ERROR: " + data.message);
            } else if(data.status) {
                $("#test").html(data);
            }
        }
    });
});