繁体   English   中英

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

[英]How to receive error in jQuery AJAX response?

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

所以应该是:

  1. $.ajax -> 致电 php function
  2. 成功插入记录时接收成功
  3. 插入不成功时收到错误

那么,我应该返回 false 吗? 来自我的 php function? 我认为 $.ajax() 成功或错误取决于 AJAX 调用是否成功。 所以,我认为即使我返回 false; 从我的 php function 来看,它仍将被视为 ajax 调用的“成功”。 正确的

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

我喜欢我最近一直在使用的另一种方式,它涉及创建自定义 HTTP header 以通知是否有错误。

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");
     }         
  }
  ...
})

如您所见,我们创建了一个自定义 HTTP header,称为DB_SUCCESS用作元数据,因此我们可以将其分配到服务器端(php)并使用客户端(javascript)读取它以了解是否有错误。

希望这可以帮助。 干杯

简而言之,这很简单:您可以捕获从 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);
    }
});

您需要在 $.ajax() 成功中处理 PHP 的成功/错误:function

假设这是您的 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;
    }
}

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

适用于各种事情,包括会话超时重新登录、访问限制、异常处理和其他一切。

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

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

我会在 PHP 中建立一个数组。

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

取决于您如何 go 插入更改这两个值。

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

您还可以使用 jQuery 中的getJSON方法使其更容易。

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

Ajax 正在客户端上发生。

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

这是一个很好的例子,可能会有所帮助:

jQuery AJAX 错误处理


    $.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);
       }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM