【发布时间】:2017-01-05 08:09:22
【问题描述】:
大家。我有一个 AJAX 调用,它返回了标题中提到的错误。我相信这是导致错误的行:var obj = jQuery.parseJSON(data); 也许我错误地构造了userData。
这是我的 jQuery:
var userData = 'email=' + email + '&password=' + password;
$.ajax({
type: 'POST',
url: './api/getInfo.php',
data: userData,
success: function(data){
var obj = jQuery.parseJSON(data);
$('#name').html(obj.firstName + ' ' + obj.lastName);
...
},
error: function(){
alert('ERROR');
}
});
这是getInfo.php:
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$email = prepareInput($_POST['email']);
$password = prepareInput($_POST['password']);
$stmt = $connection->conn->prepare('SELECT firstName,lastName,... FROM tb_users WHERE email = ? AND password = ?');
$stmt->bind_param('ss',$email,$password);
$stmt->execute();
$result = $stmt->get_result();
$obj = $result->fetch_assoc();
echo json_encode($obj);
}
如果我做错了什么,谁能告诉我?
更新
function prepareInput($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
即使$obj 包含值,从 PHP 传递的数据也是空的(我通过回显它们检查了这一点)所以这一定是echo json_encode($obj); 语句的问题。
解决方案
我终于找到了答案 - Link。这是编码问题。如果某些字符串不是 UTF-8,json_encode() 将返回空字符串,因此您需要将这些字符串转换为 UTF-8。
【问题讨论】:
-
在成功处理程序中添加
console.log(data)作为第一行以检查服务器响应。我敢打赌,在您的 JSON 字符串的末尾/之前有一些额外的代码会导致错误... -
尝试在你的 ajax 调用中添加 dataType:"json"
-
您应该使用对象作为 ajax
data而不是自己构建字符串。像这样:data: { email: email, password: password }. -
@Philipp 我试过了,但没有响应。 @Mir 如果我添加
dataType: 'json'会发生错误。 -
@eisbehr 如果更改此设置,错误仍然存在。