jQuery Validationremote
の方法を使用して、システムにユーザー名が既に存在するかどうかを確認しています。ユーザーが存在する場合、スクリプトは戻ります。does_user_exist.php
1
$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
、わかりやすくするためにここに貼り付けられたコードから削除されています)。