大家我有一个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来处理.
解决方法:
自从您提到:成功功能不接收任何数据
服务器响应似乎是空的,因为(a)凭据错误或(b)PHP中有错误,并且您的代码永远不会到达回显行.
在PHP中添加一些错误处理/确认,并确保$obj在返回之前有一个值.
try {
// ... sql code
if ( $obj && is_array( $obj ) ) {
echo json_encode( $obj );
} else {
echo json_encode( array( 'error' => 'wrong username or password' ) );
}
} catch (Exception $ex) {
echo json_encode( array( 'error' => $ex->getMessage() ) );
}
更新;调试SQL的注意事项
要测试SQL:
>作为条件(方法== POST)的第一行,添加echo json_encode(array(‘resp’=>’test’));出口;并运行Ajax代码.
您的console.log()现在应该显示{resp:test} JSON对象.这样,您就知道您的ajax调用实际上已到达SQL部分.如果您仍然没有得到任何输出,则您的代码中有其他问题……
>首先使用硬编码的SQL:只需在您知道会给您结果的WHERE中输入电子邮件/密码即可.不要使用-> bind_param()或$_POST数据,只需执行简单的SQL语句,然后查看AJAX是否返回值.
>如果Ajax现在可以工作,则修改硬编码的SQL,以将静态电子邮件/密码字符串移到bind_param()中.现在仍然不使用$_POST数据,但是我们检查bind_param方法是否有效.再次检查Ajax是否仍在工作.
>如果仍然有效,则在bind_param()调用中使用直接$_POST数据,例如-> bind_param(‘ss’,$_POST [’email’],$_POST [‘password’])-如果该方法有效,那么您知道prepareInput()函数存在问题.
在测试每个步骤时,您应该快速找出哪个部分不起作用.
标签:ajax,json,php,jquery
来源: https://codeday.me/bug/20191118/2026625.html