php - 我无法让 php 将错误返回给 jquery ajax

标签 php jquery ajax json error-handling

无论代码是否失败,我的代码都会返回成功。我尝试使用不同的方法,但我被难住了。

这是 PHP

<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
header('Content-Type: application/json; charset=UTF-8');

if (isset($_POST['username']) && isset($_POST['password']))
{
    if (file_exists("../inc/dbc.php")){
        if(!include('../inc/dbc.php')){
            print(json_encode(array('message' => 'ERROR', 'code' => 404)));
            die();
        } 
    }
    else{
        print(json_encode(array('message' => 'ERROR', 'code' => 404)));
    }
    // store post variables in temp variables
    $temp_user =                    mysql_real_escape_string(stripslashes($_POST['username']));
    $temp_pass =                    mysql_real_escape_string(stripslashes($_POST['password']));

    //Select users that have matching passwords and are currenlty employed
    $query =                        "SELECT afid, logged, active, code FROM employee as emp WHERE (emp.acct = '$temp_user') AND (emp.code = '$temp_pass') AND (emp.active = 'Y') AND ((emp.logged = 'k') OR (emp.logged='K'))"; 

    //Run the query then set the number of results as a query
    $result =                       mysql_query($query); 
    if(!$result){
        $error = mysql_error();
        print(json_encode(array('message' => 'error', 'code' => 500, 'statusText' => $error)));
        die();
    }

这是 JavaScript

function authorize(dataString,usr,pass){

                $.ajax({
                    crossDomain: true,
                    type: 'POST',
                    url: "domain/app/login.php",
                    dataType: 'json',
                    async: 'true',
                    data: dataString,
                    contentType: "application/x-www-form-urlencoded; charset=UTF-8",
                    success: function(dataResponse,status,message){
                        if(status == 'success'){
                            localStorage.setItem("pLog",dataResponse[['message']]);
                            localStorage.setItem('username',usr);
                            localStorage.setItem('password',pass);
                            $("#customer-page").off();
                                $.mobile.loading("show");
                                loadCustomers(localStorage.getItem('ezp-username'),localStorage.getItem('pLog'));
                        }
                    },
                    error: function(dataResponse,status,message){
                        gl.error_msg = "Could not log in; check user name and password.";
                        $(".error-msg").html(gl.error_msg).css('display', 'block');
                        ezReset("error_msg");
                        $.mobile.loading("hide");
                    },
                    timeout: 5000
                });
            }

我无法将标题设置为过去的内容类型,因此我尝试在出现故障时打印错误消息,有时可以工作,但大多数情况下都不起作用。我不知道为什么。

最佳答案

如果您希望 jQuery 将响应识别为错误,则需要在 PHP 中设置 HTTP 错误代码(例如 500)。这可以通过设置标题来完成,如下所示:

header('HTTP/1.1 500 Internal Server Error');

由于您的 PHP 返回 200 HTTP 状态代码,jQuery 将始终将其视为成功。这也是一种可接受的处理错误的方法,但您必须检查“dataResponse”中是否存在您设置的错误字段,并将错误处理代码移至成功 block 。

关于php - 我无法让 php 将错误返回给 jquery ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32017797/

相关文章:

php - 不同的浏览器,不同的IP?

javascript - AJAX POST 浏览器历史记录

javascript - 如何在运行时更改对话框的标题?

javascript - 刷新谷歌地图

javascript - 为带有文件夹的网站制作通用的页眉和页脚

Jquery ajax函数在本地工作但在服务器上不起作用

javascript - jquery 加载时 getElementById 的问题

php - Jquery DataTables 可排序距离列

PHP查询一条SRV记录

javascript - 如何在不向上滚动的情况下在视口(viewport)中显示文本?