为什么我得到一个空的回应?

时间:2016-02-02 15:47:49

标签: javascript php jquery json

我试图从表格中获取所有列名称:

$query = "SHOW columns FROM table;";
$json = array();
if ($result = $link->query($query)) {
while($row = $result->fetch_assoc()){ 
        array_push($json, $row['Field']);
    }
}

header( 'Content-Type: application/json' );
//print_r($json);
 echo json_encode($json);
 exit;

jQuery代码:

$.ajax({
    type: "POST",
    dataType: "json",
    data : {
        q : "abc"
    },
    success : function(data) {
        if(data.length!=0){
            console.log(JSON.stringify(data));
            $("#content").append(data);
        }
        else{
            $("#content").text("no data");
        }
    },
    error : function(data) {
        console.error("error: " + data));
    }
});

当我使用print_r($json)时,我得到了这个回复,这是正确的:

"Array\n(\n    [0] => ID\n    [1] => Name\n    [2] => Age\n    [3] => Gender\n   )\n"

但是当我使用json_encode($json)时,我得到no data,因此回复为空。

更新

好的,我取消注释了dataType: "json",添加了header( 'Content-Type: application/json' );并按照建议编辑了error callback

这是我收到的错误消息:

parsererror SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Stack-Trace:
m.parseJSON@http://code.jquery.com/jquery-latest.min.js:4:15732
Pc@http://code.jquery.com/jquery-latest.min.js:4:18120
x@http://code.jquery.com/jquery-latest.min.js:4:21525
.send/b@http://code.jquery.com/jquery-latest.min.js:4:25897

1 个答案:

答案 0 :(得分:0)

在回显结果之前,您应该设置正确的标题类型:

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

另外,尝试将AJAX请求类型设置为GET而不是POST

$.ajax({
    type:'GET',
    data: 'q=abc',
    success : function(data) {
        if(data.length!=0){
            console.log(JSON.stringify(data));
            $("#content").append(data);
        }else{
            $("#content").text("no data");
        }
    },
    error : function(data) {
        console.error("error: " + data));
    }
});

<强>更新

如果您使用的是谷歌浏览器(强烈推荐),请使用检查器(Ctrl + Shift + I)网络标签, XHR 子部分,您将在其中看到AJAX请求的尝试。

名称列下,点击请求,在右侧,您可以使用标题响应部分来检查AJAX请求正常。