如何在jQuery AJAX响应中收到错误?

时间:2011-07-04 03:15:24

标签: php jquery ajax

我正在使用jQuery $ .ajax()函数在php页面上执行数据库插入操作。因此,一旦成功,它将执行常规操作,但我希望ajax调用在更新操作失败时收到错误。

所以它应该是:

  1. $。ajax - >调用php函数
  2. 成功记录插入成功
  3. 在不成功插入时收到错误
  4. 那么,我应该做一个假的回报;从我的PHP功能?我认为$ .ajax()的成功或错误取决于AJAX调用是否成功。所以,我想即使我回归虚假;从我的php函数来看,它仍将被视为ajax调用的“成功”。右

6 个答案:

答案 0 :(得分:3)

您可以按照建议的方式在服务器响应中(或使用JSON)返回错误消息。但我不太喜欢它,因为这污染了返回的数据。

我喜欢我最近使用的另一种方式,包括创建自定义HTTP标头以通知是否存在错误。

PHP代码:

if($there_was_error){
   header("DB_SUCCESS: 0"); //Sends a custom header
}else{
   header("DB_SUCCESS: 1");
}

jQuery代码:

$.ajax({
  ...
  success: function(data, status, xhr){
     //You can use your 'data' var as always
     if(xhr.getResponseHeader("DB_SUCCESS") == 1){
        alert("Save successful");
        //Your regular sutff
     }else{
        alert("Save failed");
     }         
  }
  ...
})

正如您所看到的,我们创建了一个名为DB_SUCCESS的自定义HTTP标头,用作元数据,因此我们可以将其分配给服务器端(php)并使用客户端(javascript)进行读取以了解如果有错误。

希望这会有所帮助。干杯

答案 1 :(得分:1)

您需要在$ .ajax()成功:函数

中处理PHP的成功/错误

假设这是你的ajax.php:

if($whatever)
{
  echo 'success';
}
else
{
  echo 'fail';
}

假设这是你的javascript $ .ajax():

success: function(data)
{
    switch(data)
    {
        case 'success':
            // handle good logic
            break;
        case 'fail':
        default:
            // handle bad logic
            break;
    }
}

答案 2 :(得分:1)

我评估来自服务器的响应,如果PHP中发生错误,它只是输出JavaScript代码来显示错误。

适用于所有类型的事情,包括重新登录会话超时,访问限制,异常处理等等。

我希望这种方法更受欢迎。

https://github.com/atk4/atk4/blob/master/templates/js/atk4_univ.js#L413

答案 3 :(得分:1)

这很简单,简而言之:您可以捕获从PHP返回的任何内容。

详细信息:以下代码段可以帮助您清楚地了解问题。

PHP

$result = //your database result
if($result){
    //Print any success message you want the user to see   
    echo "Success";
}else{
    //Print any error message you want the user to see   
    echo "Error";
}

JQUERY

$.ajax({
    type: "POST",
    url: "controller.php",
    data: params,
    success: function(msg){

    //Alert the returned message to the user,
    //the variable msg already contains your message 
    //whether it is success or error,
    //it can even contain HTML or JavaScript
        alert(msg);
    }
});

答案 4 :(得分:0)

我会用PHP构建一个数组。如

$status['completed'] = true;
$status['message'] = "Completed";

取决于插件如何更改这两个值。

然后我会做http://php.net/manual/en/function.json-encode.php json_encode并回复它。您的jQuery会收到JSON,如果completed 为真,那么一切正常。如果 false ,请检查message

您还可以使用jQuery中的getJSON方法使其更加轻松。

http://api.jquery.com/jQuery.getJSON/

答案 5 :(得分:0)

Ajax正在客户端上发生。

您的PHP已在服务器上结束。

这是一个可能有帮助的优秀的示例:

jQuery AJAX error handling


    $.ajax({
        type: "POST",
        url: "login.php",
        data: "action=login&user=" + user + "&pass=" + pass,
        success: function(xhr){
            if ((xhr == "Invalid Login") 
                    || (xhr == "Invalid charaters in username.") 
                    || (xhr == "Missing username or password.")
                    || (xhr == "Unknown Error")) {
                $("#loginMessageContent").html(xhr);
            }
            else {
                simplemodalClose (dialog);
            }
       }, 
       error: function(xhr) {
           alert ("Oopsie: " + xhr.statusText);
       }
    });