1

我有这个 ajax 代码来处理 php 文件

$.ajax({
  url:'vals/Package.php', 
  data:$(this).serialize(),
  type:'POST',
  success:function(data){
    console.log(data);
    swal("Success", "We will contact you soon! Thank you :)", "success");
  },
  error:function(data){
    swal("Sorry", "Failed to send order. Please try later :(", "error");
  }
});

在我的 Package.php

$Query = mysqli_query($connecDB,"insert into query here");
if($Query){
    echo 'success message';
}
else{
    echo 'error here';
}

如果插入数据库时​​出错,我如何将其发送给 sweetalert?

如果我删除 if else 条件,则显示成功消息。我也在尝试显示错误消息。

4

3 回答 3

2

您现在只是在回显一个错误字符串,但该响应仍将使用状态 200 标头发送。您需要做的是明确设置标题:

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

我认为我说 jQuery 只是将所有非 HTTP 200 响应视为错误(即不成功的请求)是正确的。可能有一些例外情况,例如 404、301 或 201 状态代码。无论哪种方式,如果你想指出一个严重的问题:使用 http 500 (internal server error)

于 2015-09-15T16:29:50.103 回答
1

最好的解决方案是使用try/catch并发送两种消息作为响应,以下是使用您自己的代码截取的:

在你的 package.php

try {
    $Query = mysqli_query($connecDB, "insert into query here");
    if ($Query) {
        echo 'success message';
    } else {
        throw new Exception('dummy error message');
    }
} catch (Exception $exc) {   
    //handle any errors in your code, including connection issues
    echo 'error'; //this will be your "flag" to handle on the client side
    //and if you want, can also log the error with 
    //$exc->getMessage() or $exc->getTraceAsString()
    die;
}

在 JS 文件中:

$.ajax({
    url: 'vals/Package.php',
    data: $(this).serialize(),
    type: 'POST',
    success: function (data) {
        if (data !== 'error') {
            swal("Success", "We will contact you soon! Thank you :)", "success");
        } else {
           //our handled error
            swal("Sorry", "Failed to send order. Please try later :(", "error");
        }
    },
    error: function (data) {
           //other errors that we didn't handle
        swal("Sorry", "Failed to send order. Please try later :(", "error");
    }
});

通过使用try/catch ,您的代码将能够抵御意外错误。注意:当然,您可以编辑标头而不是回显您自己的标志并返回将在您的 ajax 错误函数中处理的 http 错误。

于 2015-09-15T16:41:39.123 回答
1

我找到了这段代码,它似乎工作

if($Query){

}
else{
    header('HTTP/1.1 500 Internal Server...');
    header('Content-Type: application/json; charset=UTF-8');
    die(json_encode(array('message' => 'ERROR', 'code' => 1337)));
}
于 2015-09-16T04:51:31.510 回答