1

PHPファイルを処理するためのこのajaxコードがあります

$.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 (内部サーバー エラー) を使用してください。

于 2015-09-15T16:29:50.103 に答える
1

最善の解決策は、try/catchを使用して、応答として 2 種類のメッセージを送信することです。以下は、独自のコードを使用して抜粋したものです。

あなたの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 に答える