6

jQuery Validationremoteの方法を使用して、システムにユーザー名が既に存在するかどうかを確認しています。ユーザーが存在する場合、スクリプトは戻ります。does_user_exist.php1

$registration.find(".username").each(function() {
    var $this = $(this);
    $this.rules('add', {
        remote: {
            url: "does_user_exist.php",
            type: "post",
            dataType: "json",
            data: {uname: function(){ return $this.val(); } },
            async: false,
            success: function (data) { //returns 1 if user exists
                if (data) {
                   console.log("false!");
                   return "Sorry, that user already exists." //doesn't work
                   //return false;        //doesn't work
                   //return data;         //doesn't work
                   //return {"string"};   //doesn't work
                   //return {0: "string"};//doesn't work
                } else {
                   console.log("true!");
                   return true;
                }
            }
        },
        messages: {
            remote: jQuery.format("{0}") //doesn't work
            // remote: "Simple string doesn't work here either"
        }
    });
});

私の問題は、エラー メッセージが表示されないことです。console.log出力から、ユーザーが存在する場合は正しくログに記録されることがわかりfalse!ますが、エラー メッセージは表示されません。

コメントアウトされた行からわかるように、エラー文字列を何らかの形で間違った形式で返していると仮定して、推測とチェックを介して何が間違っているのかを正確に把握しようとしていますが、私は成功していません。

Edit3: バックエンドの応答を変更することができました。PHP は現在、JSON でエンコードされたtrue/を送信していますfalseが、役に立ちません。次の方法でバックエンドの応答を送信しようとしましたが、何をしてもプラグインがそれをキャッチしていないようです:

json_encode( false )
json_encode( '["false"]' )
json_encode( "false" )
json_encode( ["false"] )
"false"
false
NULL
""
0

ドキュメントに基づいて私が知る限り、次のいずれかが機能するはずです。

応答は JSON として評価され、有効な要素の場合は true である必要があり、無効な要素の場合は、既定のメッセージを使用して、false、undefined、または null にすることができます。

この質問への回答は、この問題に関連している可能性があることに注意してください

改訂されたコードは次のとおりです。

$registration.find(".username").each(function() {
    var $this = $(this);
    remote: {
        url:  "does_user_exist.php",
        type: "post",
        data: {entityExistence: function(){return $this.val();} },
        success: function(data){ console.log(data); }
    },
    messages: {
        remote: "Sorry, that username is not available."
   }
});

PHPスクリプトは常に正しく返されtrueます。falseドキュメントによると、以外trueはエラー メッセージをトリガーする必要があります。しかし、エラーメッセージは表示されません。他のチェックが正常に機能しているため、エラーメッセージが機能していることはわかっています(たとえばrangelength、わかりやすくするためにここに貼り付けられたコードから削除されています)。

4

4 に答える 4

7

わかりました、最終的にそれを見つけました、ランダムに。successコールバックは明らかにすべてを台無しにしていました。私がしなければならなかったのは、これを削除することだけでした:

success: function(data){
    console.log(data);
}

それを行うとすぐに、単純な文字列応答を使用して、すべてが期待どおりに完全に機能しました。

"true"

"false"

これを説明することはできませんが、誰かがドキュメントを更新してくれることを願っています! complete使用しても、そのように壊れないことに気付きましたsuccess

于 2013-10-21T21:31:04.117 に答える
3

メソッドドキュメントにはremote次のように記載されています。

"true"サーバー側の応答は、有効な要素の場合は JSON 文字列である必要があり、デフォルトのエラー メッセージを使用して、無効な要素の場合は"false"undefined、またはのいずれかになります。nullサーバー側の応答が文字列の場合。"That name is already taken, try peter123 instead"、この文字列は、デフォルトの代わりにカスタム エラー メッセージとして表示されます。


引用OP:

「ユーザーが存在する場合、スクリプトdoes_user_exist.phpは戻ります1。」

これは、あなたが望むものとは逆かもしれません。1として解釈される可能性があるためtrue、プラグインに検証に「合格」したことを伝えます。ドキュメントに従って、ユーザーが存在し、エラー メッセージをトリガーする場合、応答は、、、、falseまたはundefined文字null列 (メッセージ) である必要があります。

于 2013-10-17T19:41:28.120 に答える
-2

文字列を返しても、自動的には表示されません。表示したい場合は、次のようにする必要があります。

$('#myDiv').html('<p class="error">Sorry, that user already exists.</p>');
于 2013-10-15T23:53:42.750 に答える