大家。我有一个AJAX调用,它返回标题中提到的错误。我相信这是导致错误的行:NavigationPage
也许我错误地构建了var obj = jQuery.parseJSON(data);
。
这是我的jQuery:
userData
这是getInfo.php:
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');
}
});
有人可以告诉我,我做错了吗?
更新
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;
}
包含值(我通过回显它们来检查),从PHP传递的数据也是空的,因此它必须是$obj
语句的问题。
解
我终于找到了答案 - Link 。这是编码问题。如果某些字符串不是UTF-8 echo json_encode($obj);
将返回空字符串以便处理此字符串,则需要将这些字符串转换为UTF-8。
答案 0 :(得分:3)
因为你提到:成功函数没有收到任何数据
服务器响应似乎是空的,因为(a)凭据错误或(b)PHP中存在错误,您的代码永远不会到达echo
行。
在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:
作为条件中的第一行(method == POST)添加echo json_encode(array('resp'=>'test')); exit;
并运行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()调用中使用direkt $ _POST数据,如->bind_param('ss', $_POST['email'], $_POST['password'])
- 如果这样做,那么你知道它有问题prepareInput()函数。
在测试每个步骤时,您应该快速找出哪个部分无效。
答案 1 :(得分:0)
在使用结果之前,您似乎无法检查execute
是否成功。
如果我是你,我会在使用console.log(data)
之前尝试jsonParse
。我想你会发现一些惊喜。
另外,请检查您的apache日志。也许PHP会给你一些警告。