PHP返回false但$ .post收到true

时间:2014-10-13 13:42:22

标签: php jquery

我在互联网上看,但实际上我没有成功,所以我在这里尝试:)

我有一个jquery函数,如:

var arr = [];
$.post('my.php',{
      data:  arr
     }).done(function(response){
        console.log(response);
       alert('successful');
     }).fail(function(response){
       console.log(response);
       alert('failure');
});

我的php看起来像

$bOk = false; //preset
//...
return $bOk; // actually returns false here for testing

这些是代码示例,但实际上就是它的作用。

为什么return false不会调用.fail()

如果我有某种php错误,则会调用.fail()

我需要做些什么来调用.fail()函数吗?

3 个答案:

答案 0 :(得分:3)

.fail()用于HTTP错误。如果您要执行header("HTTP/1.0 404 Not Found");之类的操作,则应触发失败。但是目前,它返回200 OK message,因为它从服务器获得响应。

尝试实施404响应,或在.success()调用中,检查响应是否包含错误响应。

编辑。

应该注意的是,我作为示例(404)给出的回答可能不是最合适的(取决于您的申请的具体情况)。

在此处查看此链接以获取HTTP状态代码列表,并确定最有效的内容。 最有可能的是,调查400和500范围。

http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

答案 1 :(得分:0)

失败回调应该用作失败回调,所以只有当某些事情真的失败时才会使用。

在您的情况下,您可以返回错误代码,因此在成功回调中您将执行以下操作:

var arr = [];
$.post('my.php',{
    data:       arr
}).done(function(response){
    if(response==2){
     alert('password is invalid');
     return;
    }
    console.log(response);
    alert('successful');

}).fail(function(response){

    alert('An unexpected error occurs, please contact the administrator if this error persist.');

});

如果您仍想在失败回调上进行登录,那么在这种情况下,您需要使用http_response_code php函数返回http状态,如下所示:

http_response_code(404);

答案 2 :(得分:-1)

false不会返回http错误。

如果您想在.fail()中返回http错误,请使用以下代码

if ($everything_is_ok)
    {
        header('Content-Type: application/json');
        print json_encode($result);
    }
else
    {
        header('HTTP/1.1 500 Internal Server Booboo');
        header('Content-Type: application/json; charset=UTF-8');
        die(json_encode(array('message' => 'ERROR', 'code' => 1337)));
    }