我无法使php向jquery ajax返回错误 - php

无论代码是否失败,我的代码都会不断返回成功。我尝试使用不同的方法,但很困惑。

这是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
                });
            }

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

php参考方案

如果希望jQuery将响应识别为错误,则需要在PHP中设置HTTP错误代码(例如500)。可以这样设置标题:

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

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

php:是否有充分的理由引用所有数组键/索引? - php

我正在遍历别人的代码,他们总是避免转义其数组键。例如:$ row_rsCatalogsItems [名称]代替$ row_rsCatalogsItems ['名称']因此,我不断地对自己接触的所有事物进行微小的更改,以应对这些惰性。但是现在我想知道这样做是否有很多好处。我得到它会在默认为字符串之前检查常量(我在处理常量时会讨厌php中的行为,因为即使未定义,…

将输入类型复选框关联到输入类型文本 - php

我有一个问题,我需要将输入类型复选框与输入类型文本关联。情况如下:从数据库中提取数据。 PK数据是复选框的值。当复选框选择输入类型的文本时,您可以在其中输入特定数字。现在的问题是,选中所有类型的复选框输入文本都会被激活。我希望通过选择复选框输入,仅启用与复选框相关联的输入。我的HTML代码(此代码创建一个输入复选框,并为数据库中的每个记录输入文本,而我要激活…

在单次点击甚至点击链接时创建不同的功能 - php

我有3个链接,它们是学生的名字。第一次单击链接或奇数时间时,会出现另一个div,其中包含该学生的详细信息。在第二次或偶数时间单击同一链接时,我需要隐藏学生div。使用jquery的data()事件对我来说效果很好。我的要求是,如果我单击第一个学生链接,则会显示第一个学生的详细信息。如果单击第二个学生链接,则会显示第二个学生的详细信息。如果再次单击第一个链接,…

尝试使用AJAX上载文件时,FormData对象始终为空 - php

当尝试使用AJAX上传图像而不直接提交表单并将FormData对象发送到服务器时,它将返回空的$_FILES数组。但是,如果我使用<input type="submit">标记提交表单,则$_FILES数组不会为空,并且会接收数据。的HTML<form action="core/update.php"…

PHP标头功能不起作用 - php

我曾经使用此功能从一个PHP页面重定向到另一个:header( 'Location: student.php?cnp='.$_REQUEST['name']) ; 在我的本地主机中,它确实可以工作,但是如果在Internet中对其进行测试,则不会重定向。我也尝试给出完整的路径(如http://.../student.p…