我有这个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": }
你能帮我吗?
由于
答案 0 :(得分:0)
答案 1 :(得分:0)
如果它正在使用LIMIT 9而不使用LIMIT 10,那么第9行之后就会出现问题,所以请检查你的第10行它可能有任何“特殊字符”,“新行字符”正在产生问题。
答案 2 :(得分:0)
有两点我想在你的代码中指出要看一下。首先,错误的构造应该使用json_encode
函数,这将确保有效的格式,所以不应该执行echo '{"error":{"text":'. $e->getMessage() .'}}';
$response = new stdClass();
$response->error = new stdClass();
$response->error->text = $e->getMessage();
echo json_encode($response);
请注意,它看起来过于复杂,但我尝试保留您在示例中指定的格式。
另一件事是,如果没有设置正确的标题,Javascript将不喜欢type: 'json'
。那么我建议你的PHP函数应该是这样的:
function getList() {
$response = new stdClass();
$sql = " SELECT * FROM list ";
try {
$db = getConnection();
$stmt = $db->query($sql);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
$response->result = $result;
unset($db);
} catch(PDOException $e) {
$response->error = new stdClass();
$response->error->text = $e->getMessage();
}
header("Content-Type: application/json");
echo json_encode($response);
exit();
}
我希望这有帮助!