php jsonerrorsyntax,PHP-JSON输入意外结束-未捕获的SyntaxError

大家我有一个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值