私はjQueryでこの関数を書きました:
function checkAvailability(value) {
var result = true;
$.getJSON("registration/availability", { username: value }, function(availability) {
if (!availability)
result = false;
alert("in getJSON: " + result);
});
alert(result);
return result;
}
この秒後に「getJSON」からアラートを受け取りました。なぜこのようになったのでしょうか。
ユーザー名の可用性をチェックするSpring MVCプロジェクトとコントローラーメソッドがあります。コントローラ メソッドは正常に動作します。しかし、最終結果を受け取るのが遅すぎます。関数で適切に値を返すように同期するにはどうすればよいですか?
編集
jQueryの検証でこの関数を使用しています。checkAvailability()
テスト中に関数を抽出しました。
$.validator.addMethod("checkAvailability", function(value, element, param) {
var das = checkAvailability(value);
return das;
}, jQuery.format("Someone already has that username. Please try another one."));
そして、これは私のフォーム検証です:
$(".form").validate({
rules: {
username: {
checkAvailability: true
},
....
},
messages: {
}
});
編集2
これは私のコントローラーメソッドです。ブール値を返します。ユーザー名が取得された場合、false 値が返されます。
@RequestMapping(value="/registration/availability", method = RequestMethod.POST)
public @ResponseBody boolean getAvailability(@RequestParam String username) {
List<User> users = getAllUsers();
for (User user : users) {
if (user.getUsername().equals(username)) {
return false;
}
}
return true;
}