0

jqueryを使用してajax/phpの接続モジュールに取り組んでいます。電子メールまたはパスワードが false かどうかを示すために、php から ajax に例外をスローする必要があります。

jquery の ajax によって提案された「エラー」機能を使用する方法を Web で検索しました。いくつかの解決策が見つかりましたが、どれも機能しません。

PHP 例外をスローしようとしました: エラー関数はそれをキャッチしません。jsonでエンコードされたデータを送信してエラー関数の使用を回避しようとしました:成功関数でそれを使用する方法はありません...エラー関数はサーバーエラーのみをキャッチするようですが、これは本当に興味深いものではありません.

誰か、php から ajax を介してエラーを伝える方法を見つけるのを手伝ってくれませんか?

4

2 に答える 2

4

PHP レスポンスのリクエスト ステータスコードを 4XX または 5XX に設定します。これにより、error/failコールバックになります。

必ずしもリストの値である必要はありません。たとえば、独自のものを作成できます。

StatusCode: 550
StatusText: "My Custom Error"

私の記憶が正しければ、PHP では次のようになります。

header('HTTP/1.0 550 My Custom Error');

最後に、エラーの詳細をクライアントに送信して、何が問題なのかを通知します。ヘッダーに情報を配置するか、次を使用して例外をシリアル化できますjson_encode()

<?php

try {
    if (some_bad_condition) {
        throw new Exception('Test error', 123);
    }
    echo json_encode(array(
        'result' => 'vanilla!',
    ));
} catch (Exception $e) {
    echo json_encode(array(
        'error' => array(
            'msg' => $e->getMessage(),
            'code' => $e->getCode(),
        ),
    ));
}

?>

クライアント側:

$.ajax({
    url: 'page.php',
    data: { 'some_bad_condition': true }
}).done(function(data){

    console.log('success!', data);

}).fail(function(jqXhr){

    var errorObject = $.parseJSON(jqXhr.responseText);
    console.log('something went wrong:', errorObject);
    //jqXhr.status === 550
    //jqXhr.statusText === 'My Custom Error'

});

PHP ファイルで正しい MIME タイプを指定することを忘れないでください。そうすれば、明示的に指定しなくても、jQuery はそれが JSON 応答であることを認識します。

header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
于 2013-10-18T09:41:37.797 に答える
0

このプラグインを使用してみてください:

AJAXフォーム

ここで入手してください。

ajax はフォームの送信を処理し、エラーが発生した場合はエラー コールバックが使用されます。

これは以前使ったことがあると思います。非常に使いやすく、PHP でリターン ステータス コードが正しいかどうかを確認することもできます。

于 2013-10-18T09:43:02.940 に答える