2015-08-14 78 views
1

无论代码是否失败,我的代码都会一直返回成功。我尝试使用不同的方法,但我很难过。我无法让php向jquery返回一个错误ajax

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

我无法设置页眉过去的内容类型,所以我想只是打印错误消息时失败的东西有时作品但大多没有。我不知道为什么。

+0

您是否试图访问您在PHP数组中定义的错误消息,并以JSON的形式将其打印回ajax调用? – showdev

回答

3

如果您希望jQuery将响应识别为错误,则需要在PHP中设置HTTP错误代码(例如500)。这可以通过设置一个头,像这样做:

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

因为你的PHP函数返回一个200 HTTP状态代码,jQuery将始终认为这是成功的。这也是处理错误的可接受的方式,但是您必须检查'dataResponse'是否存在您设置的错误字段,并将错误处理代码移至成功块。

+0

有关进一步的参考,请参阅[可能的textStatus值](http://stackoverflow.com/questions/11103995/what-are-all-of-the-possible-values-of-the-textstatus-parameter-in-the -回电话)。 – showdev

+0

当我试图说我得到一个错误,说我不能,因为“头已经发送”。 – user3314802

+1

@ user3314802“已发送的标题”表示您已经向浏览器发送了一些内容。检查并确保在尝试之前不要回显或打印。 – snollygolly