ユーザーがサインアップページに情報を入力して「送信」をクリックすると、usernameCheck()
が呼び出されます。理論的には、サーバーにAJAX要求を送信し、ユーザー名が取得されたかどうかを確認する必要があります。そうであれば、ユーザに警告があり、何も起こらない。それ以外の場合は、パスワードが有効であることを確認します。以前の質問では、AJAXが非同期に返される前にフォームの送信を停止するためのコールバック関数が必要だと言われました。代わりに、AJAXリクエストのsuccess:
部分にフォームを送信します。したがって、ユーザー名が一意でパスワードが有効な場合にのみ呼び出される必要があります。AJAXのコールバック(成功?)機能
しかし、今まで...パスワードチェックの段階に到達する、または任意の警告を表示していないようだ
function usernameCheck(){ //returns true if username is free
var ajaxHeaders = {}; //create header object
ajaxHeaders["X-CSRFToken"] = getCookie('csrftoken'); //add csrftoken from cookies for authentication server-side
$.ajax({
type:'POST',
url:"http://omnicloud.me/signup",
data:{username: $("#username").val()},
success:function(response){
if(response=="true"){
$('#passAlert').innerHTML("Sorry, that username is already taken")
//passalert is where all of the errors (username taken, invalid password) show up
} else {
if (passwordCheck()){
$('#signup_form').submit();
}
}
},
headers: ajaxHeaders //settings for ajax request
});
return !($('#passAlert').value == "Sorry, that username is already taken")
}
function passwordCheck(){
var pattern = /[a-z,A-Z,0-9,$,#,@,!,&,%,+,_,-,?]{10,}/ //regexp for valid charachers
var text = document.getElementById('password').value;
var msg = document.getElementById('passAlert');
if(text.length < 10){
msg.innerHTML = "Passwords need to be at least 10 characters long :(";
return false;
} else if (!text.match(pattern)){
msg.innerHTML = "You have entered an invalid digit (sorry)";
return false;
} else if (unacceptable(text)){
msg.innerHTML = "You can be more creative than that...";
return false;
} else if(text != document.getElementById('pass_repeat').value){
msg.innerHTML = "Your passwords do not match.";
return false;
}
return true;
}
function unacceptable(pwd){ //joins the array, if it matches any one of them
//(g means at any point, i means case insensitive) password rejected
var re = new RegExp(unforgivable.join("|"),"gi");
return (pwd.toString().match(re) != null);
}
Djangoのサインアップビュー:
def signup(request):
if request.method == 'GET':
return render_to_response('signup.html', context_instance=RequestContext(request))
elif request.is_ajax():
#query db for user with username provided via ajax, return if it exists
try:
user = User.objects.get(username=request.POST.get("username"))
except User.DoesNotExist:
return HttpResponse("false",context_instance=RequestContext(request))
else:
return HttpResponse("true", context_instance=RequestContext(request))
ブラウザツール(F12)を開いて何かが送信されているかどうかを確認します。 –
アラート(応答)を試みる。成功関数の内部でその値を確認してください – mithunsatheesh
@ミスン・シース・アー・オハイオ州、アラートは表示されません。これをコンパイルしないようにする何かが見えますか?私はDjangoビューも含めましたが、それは失敗してはいけないほど簡単です。 – Chris