jQuery Post PHP总是发送成功响应

时间:2018-08-27 21:04:30

标签: php jquery

我正在通过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);  
}  

谢谢!

4 个答案:

答案 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");