0

jQueryを使用してシンプルで機能するAJAXフォームを作成しました。フォームは、送信前にjQueryで検証され、PHPで再度送信に成功した後に検証されます。

唯一の問題はエラー処理です。PHPチェックですべてのフィールドに問題がないことが返された場合、成功メッセージを表示します。エラーが発生した場合は、単に「エラーが発生しました」と表示します。
PHPからjQueryにデータを送り返して、無効なフィールドを無効としてマークできるようにするにはどうすればよいですか?

または、動的強調表示でJavaScriptをオンにする必要があり、JavaScriptがオンになっている場合、フォームを間違って送信できないため、このような形式のエラー処理は不要ですか?

基本的に、私の有効なチェックは次のようになります(もちろん簡略化されています):

function checkSomething( $something ) {

        $valid = true;

        if ( strlen( $something ) === 0 ) {
            $valid = false;
        }


        return $valid;
} 

スクリプトの最後で、次のようにします。

if ( checkSomething( $something ) && checkThis( $this ) && checkThat( $that ) ) {
    echo "success"; 
} else {
    echo "error";
}

そして、私のJavaScript / jQueryコードでは、次のようになります。

$.ajax({
    url: "form.php",
    type: "POST",
    data: string,
        success: function ( result ) {
            if ( result == "success" ) {
                alert( "success" );                     
            } else {
                alert( "error" );
            }
        }
});
4

3 に答える 3

1

PHPではサービスを1つだけにする必要があると思います。フォームからデータを送信します。無効なデータがある場合は、どのフィールドが間違っているかを示すJSONを返し、解析して表示できるようにすることができます。問題がなければ、その成功メッセージを表示するだけです。

ただし、問題が発生するかどうかはわかりません。

于 2013-02-15T20:28:16.580 に答える
1

フォームの送信には 3 つのステップがあります: JavaScript の検証と送信、PHP の検証/処理、JavaScript の完了 (「無効なフィールドを無効としてマークすることができます」)

ステップ 1 が完了し、ステップ 2 の大部分が完了したようです。

PHP コードには、無効な値を保持する何らかのデータ構造 (できれば配列) が必要です。このデータをブラウザにエコーすることでブラウザに返すことができます

<?php
...
...
if( count( $invalidFieldArray ) ){
    echo json_encode( array( 'status' => 'Fail',
                             'data' => $invalidFieldArray ) );
}else{
    echo json_encode( 'status' => 'Success' );
}

上記のコードは、成功/失敗を JavaScript フォームに返します。

個人的にjQuery フォーム プラグインを使用してフォームの送信を処理しているので、試してみることをお勧めします。すぐに使える優れた機能がたくさんあります。

$.ajax({
    url: "form.php",
    type: "POST",
    data: string,
    dataType: json,
        success: function ( result ) {
            if ( result.status === "Success" ) {
                alert( "success" );                     
            } elseif (result.status === 'Fail'){
                for (field in result.data) {
                         /* Invalid field handling */
                         ...
                } 
            }
        }
});

ヒント: 少し話題から外れますが、JavaScript で比較を使用する場合は、常に 3 重等価 ( === ) を使用します。JavaScript では、2 重等価 ( == ) は他の言語と同じではありません。JavaScript は double equals を使用して型強制を行うため、一貫性のない結果が得られます。

于 2013-02-15T20:47:23.180 に答える
0

次のように、PHP からデータを送信して URL に保存できます。url.com/#value=1

于 2013-02-15T20:23:26.713 に答える