2010-10-19 23 views
3

是否可以强制错误状态从PHP脚本返回到ajax请求。JavaScript/jQuery和PHP Ajax强制执行错误

我正在处理ajax请求中的成功和错误状态,我想要一种强制错误的方法。该错误似乎只是由于xhttp错误而触发的,我想在服务器未满足条件时触发该错误。它似乎混淆不得不返回成功,要真正把国旗在回应一个错误

回答

4

您可以使用header要做到这一点,例如:

header('HTTP/1.1 503 Service Unavailable'); 
+1

此外,代码可以是任何在400-500范围内的数的标准的HTTP '错误' 状态代码:HTTP:// EN .wikipedia.org /维基/ List_of_HTTP_status_codes#4xx_Client_Error – benastan 2013-05-13 21:44:10

5

你可以从两个角度来处理这个:

  • 强制的错误,以通过输出HTTP标头例如404或503
  • 强制基于所得数据的某些条件被抛出的错误被抛出。

    PHP

    <?php 
    if(User::Login($_POST['username'], $_POST['password'])) { // Your logic here 
        print 'Login successful!'; 
    } else { 
        header("HTTP/1.0 403 Forbidden"); 
        print 'Bad user name/password'; 
    } 
    

    jQuery的

    $.ajax({ 
        'url': '/some/url', 
        'type': 'POST', 
        'data': { 
        'username': '[email protected]', 
        'password': 'rhd34h3h' 
        }, 
        'success': function(data) { 
        alert(data); 
        }, 
        'error': function(jqXHR, textStatus, errorThrown) { 
        alert('ERROR: ' + textStatus); 
        } 
    }); 
    

    强制的错误:

强制的错误,以通过输出HTTP报头,如404或503被抛出根据结果​​数据的某些条件抛出:

PHP

<?php 
$return = array(); 
if(User::Login($_POST['username'], $_POST['password'])) { // Your logic here 
    $return['success'] = True; 
    $return['message'] = 'Login successful!'; 
} else { 
    $return['success'] = False; 
    $return['message'] = 'Bad user name/password'; 
} 
print json_encode($return); 

jQuery的

$.ajax({ 
    'url': '/some/url', 
    'type': 'POST', 
    'dataType': 'json', 
    'data': { 
    'username': '[email protected]', 
    'password': 'rhd34h3h' 
    }, 
    'success': function(data) { 
    if(data['success']) { // Successful login 
     alert(data['message']); 
    } else { // Login failed, call error() 
     this.error(this.xhr, data['message']); 
    } 
    }, 
    'error': function(jqXHR, textStatus, errorThrown) { 
    alert('ERROR: ' + textStatus); 
    } 
});