email1: {
required: true,
blacklist: true,
beanEmailValidator: true,
minlength: 6,
maxlength: 70,
remote: {
type: "GET",
url: llbFieldValJSONURL,
data: {
fieldData : function() {
return $("#enterEmail").val();
}
},
dataType:"json",
dataFilter: function(data) {
var json = jQuery.parseJSON(data);
if(json.error == "true") {
return "\"" + json.errorMessage + "\"";
} else {
return success;
}
}
}
}
この関数は、ユーザー名の一意性をチェックし、一意でない場合はエラーを返します。問題は、リモートメソッドが有効になった後、追加の呼び出しを行わないことです。値が入力/変更されるたびにトリガーする必要があります。
たとえば、一意でないユーザー名を3つ入力すると、毎回呼び出しが行われます。一意のユーザー名を入力すると、呼び出しが正しく行われ、ユーザー名が有効なものとして返されます。したがって、フィールドは有効です。ここで、別の一意でない(無効な)ユーザー名を入力しても、リモートメソッドは再度トリガーされません。
どういうわけか応答をキャッシュしているのだろうか?
無効な(一意ではない)応答:
{"error":"true","errorMessage":"<b>The User Name you chose is already in use.</b> Please enter another name."}
有効な(一意の)応答:
{"error":"false","errorMessage":""}
編集
SOでこれを見た:
https://stackoverflow.com/a/1821667/335514
$("#site").change(function() {
$("#email").removeData("previousValue");
});
したがって、プラグインは応答をキャッシュしているようです。プラグインにはキャッシュをオフにするメソッドがありますか、それともcache: false
ajax呼び出しにを追加しても同じことができますか?
編集
これらの方法はどちらも機能しませんでした。フィールドが有効とマークされると、リモート呼び出しを再度行うことはないようです。修正する方法についての考え?関数を独自のaddMethodに入れると、このシナリオを防ぐことができますか?