我正在通过Post向php文件发送一些数据,即使PHP显然发回了错误消息,我也总是在以jQuery状态检索“成功”。
其背后的原因是什么?
$.post('post.php',
{
post1:somevariable1,
post2:somevariable2,
post3:somevariable3
},
function(response,status){
if(status == "success") {
//success message (I'm always getting this)
}
else {
//error message
}
});
Post.php
if ($stmt === false) {
echo "error!!";
die(print_r(sqlsrv_errors(), true)); // This is what PHP is sending
} else {
echo "Success!!";
sqlsrv_free_stmt($stmt);
}
谢谢!
答案 0 :(得分:1)
如果您要发送操作结果作为请求的返回,只需在success
回调中检查响应即可。
$.post('post.php',
{
post1:somevariable1,
post2:somevariable2,
post3:somevariable3
},
function(response,status){
if(response.status == "success") { // Here I'm checking the `response` argument
//success message (I'm always getting this)
}
else {
//error message
}
});
我假设您的响应是从PHP作为具有属性status
的对象发回的:
{
status: "success"|"error"
}
答案 1 :(得分:1)
正如其他答案所指出的那样,您的PHP文件正在完成,然后返回成功状态,因此您始终会看到status=='success'
。您实际要做的是检查response
中的值。我建议做类似的事情:
if ($stmt === false) {
echo json_encode(array('success' => false, 'reason' => sqlsrv_errors()));
exit;
} else {
echo json_encode(array('success' => true));
sqlsrv_free_stmt($stmt);
}
然后在您的jquery中执行以下操作:
$.post('post.php',
{
post1:somevariable1,
post2:somevariable2,
post3:somevariable3
},
function(response,status){
let result = $.parseJSON(response);
if (result.success) {
echo "success!";
}
else {
echo "error: " + result.reason;
}
});
答案 2 :(得分:0)
我认为问题在于没有任何问题在进行中,服务器未给您200的响应,因为它没有发现错误。
尝试在您希望失败的条件下使用标头
header("HTTP/1.1 500 Internal Server Error");
exit;
//or try return false;
答案 3 :(得分:0)
post.php的响应状态为200。浏览器/ js不会检查您在响应中发送的文本。
您可以设置标题以使浏览器/仅知道该错误:
header("HTTP/1.1 500 Internal Server Error");