3

jquery ドキュメントから、jquery 検証プラグインのリモート機能を説明しています。

応答は JSON として評価され、有効な要素の場合は true である必要があり、無効な要素の場合は、既定のメッセージを使用して、false、undefined、または null にすることができます。または文字列。「その名前は既に使用されています。代わりに peter123 を試してください」というエラー メッセージが表示されます。

応答をエコーする php ページがあり、echo("true") または echo("false") を使用すると説明どおりに動作します。ただし、文字列をエコーするたびに、エラー メッセージは表示されず、デフォルト メッセージも表示されません。エラー メッセージをエコー バックし、検証中の入力ボックスの横にあるエラー ラベルに表示するにはどうすればよいですか?

ここに私のjquery関数があります:

$(document).ready(function(){
    $("#masq").validate({ 
        rules: { 
             user: {
                required:true,
                minlength:1,
                remote:"<?=$_SERVER['PHP_SELF']?>?action=remoteCheck"
             }
        }, 
        messages: { 
            user: "id must have at least 1 character."
        } 
    });         
 });

そして私のphp関数:

//sql validation here
    if(!$user) {
        $return = "id " . $user . " does not exist."; 
        //echo("false"); works correctly
            echo($return); //does  
    }
    else {
        echo("true");
    }
4

4 に答える 4

2

私もこれに苦労しました(複数の値を渡す必要があり、どの条件がfalseを返すかに応じて、連結されたエラーメッセージを表示しますが、それは別のSO投稿用です)が、最初に行ったように、ドキュメントが何であるかを誤解しています言う-それはtrueまたはfalseのみを返すことができます(JSON形式で渡されているため)-それが参照している「文字列」は、messages:codeを使用し、エラーに関連するメッセージを指定する場合です:

次に例を示します(コメント付き):

$("#MemberInfo").validate({
    errorPlacement: function(error, element) {
           error.insertAfter(element);
       },
    rules: {    
        Memberemail: {
            required: true,
            email: true,
            remote: "checkReg.cfm"
        },

    },
    messages: {
        Memberemail: {
            required: "Please enter a valid email address",
            remote: jQuery.validator.format("{0} is already registered")    
        }
    }
});

サーバー側のコードは「true」または「false」を返し、メッセージ内の{0}は、フォームからサーバー側スクリプトに渡された値を入力し、それと残りのカスタムエラーメッセージをエラーに出力します。フィールドの横に表示されます。

私はまだJQueryを学んでいるので、それがまだ問題である場合は、これがあなたや他の誰かに役立つことを願っています!

于 2011-03-07T22:23:38.217 に答える
2

サーバーが有効なJSON (有効な JS だけでなく) を返す場合、文字列を返すことが可能であることを確認できます。Ruby on Rails では、"my string".to_json必要なエスケープを処理する を介してこれを実現できました。PHPのアプローチがどうなるかわかりません。JSON 文字列は、次のように二重引用符で囲む必要があります'My name is "Liam"'.to_json => ""My name is \\"Liam\\"""。サーバー プラットフォームが何であれ、その右側にあるような文字列を提供する必要があります=>

于 2011-09-30T17:40:58.187 に答える
1

ドキュメントに記載されているように、有効な JavaScript を出力する必要があるため、文字列を引用符で囲みます (ID に引用符などが含まれている可能性がある場合は、忘れずにエスケープしてください)。

$return = "\" id" . $user . " does not exist.\"";

あなたはタイプしないだろう

var foo = id 2 does not exist.;

JSのどちらかですよね?

于 2010-06-03T15:34:07.830 に答える
0

私は github にバグを入力しましたが、これはあなたの質問に答えるはずです。
理想的ではありませんが、あなたのものを機能させるでしょう

Scenerio
フォームの日付をデータベースの日付と比較します。
リモートを使用して PHP Lithium フレームワークのメソッドを呼び出しました。
レスポンスは JSON オブジェクト {"data" : "true"} または {"data" : "xx/xx/xxxx より後の日付を入力してください"} です

これは惨めに失敗します。
それをたどると、投稿中にショートしたことがわかります(私は思います)。

文字列「true」または「false」のみを返すと、正常に機能します。
falseの代わりに「ある種のメッセージ」を返すと、それも壊れます。

ドキュメントには、メッセージを返すことができるはずだと書かれていますが、ブール値以外を渡すと壊れます。
ヘッダーなども追加する必要があるかどうかわかりませんか?

回避
策 (cdn を使用する代わりに) 実際のソース ファイルをダウンロードしました。応答から response.data への行 976 と 985 を変更し、元の json オブジェクトを使用しました。

于 2012-04-20T03:37:13.290 に答える