【发布时间】:2014-09-02 19:54:32
【问题描述】:
我有这个 PHP:
function getList() {
$sql = " SELECT * FROM list ";
try {
$db = getConnection();
$stmt = $db->query($sql);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode(array('result' => $result));
$db = null;
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
还有这个 javascript:
$.ajax({
type: 'GET',
url: rootURL + '/' + myAPI,
dataType: "json",
success: function(list) {
var list = list.result;
console.log (list);
}
error: function( jqXHR, textStatus, errorThrown ) {
console.log (" errors: " );
console.log (jqXHR);
console.log (textStatus);
console.log (errorThrown);
}
});
现在一切正常,直到我在数据库的 list 表中添加了一些行。
所以现在来自 AJAX 的 js list 结果是空的:
{"result": }
我从 AJAX 收到的错误是:
Object { readyState=4, status=200, statusText="OK", more elements...}
parsererror
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
所以我尝试删除:dataType: "json", 但result 仍然为空。
使它起作用的唯一方法是像这样限制 SQL 查询:
$sql = " SELECT * FROM list LIMIT 9 ";
它的工作原理:
{"result":
[
{"ID":"1","name":"...","year":"0","description":"...","image_URL":...","state":"..."},
{"ID":"2","name":"...","year":"0","description":"...","image_URL":"...","state":"..."},
{"ID":"3","name":"...","year":"0","description":"...","image_URL":"...","state":"..."},
{"ID":"4","name":"...","year":"0","description":"...","image_URL":...","state":"..."},
{"ID":"5","name":"...","year":"0","description":"...","image_URL":"...","state":"..."},
{"ID":"6","name":"...","year":"0","description":"...","image_URL":"...","state":"..."},
{"ID":"7","name":"...","year":"0","description":"...","image_URL":...","state":"..."},
{"ID":"8","name":"...","year":"0","description":"...","image_URL":"...","state":"..."},
{"ID":"9","name":"...","year":"0","description":"...","image_URL":"...","state":"..."},
]
}
我不明白为什么会有这样的限制。我也试过了:
$sql = " SELECT * FROM list LIMIT 10 ";
以此类推,但结果还是空:
{"result": }
你能帮帮我吗?
谢谢
【问题讨论】:
-
不要手动构造 JSON。使用
echo json_encode(array('result' => $result))。 -
你试过了吗 var_dump($result); ? json_encode 返回 false,你必须找出原因。
-
在开发者工具的网络选项卡中查看回复。您的脚本可能在 JSON 之前显示错误消息。
-
@LorenzMeyer,
var_dump($result);显示我期望的结果,array(13) ....@Barmar,谢谢我尝试了echo json_encode(array('result' => $result)),但结果相同,脚本没有给我任何错误消息 -
@Frank barmar 的建议给了你不同的输出,不是吗?睁大眼睛!
标签: javascript php sql ajax json