2011-12-06 16 views
1

ユーザーがサインアップページに情報を入力して「送信」をクリックすると、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)) 
+0

ブラウザツール(F12)を開いて何かが送信されているかどうかを確認します。 –

+0

アラート(応答)を試みる。成功関数の内部でその値を確認してください – mithunsatheesh

+0

@ミスン・シース・アー・オハイオ州、アラートは表示されません。これをコンパイルしないようにする何かが見えますか?私はDjangoビューも含めましたが、それは失敗してはいけないほど簡単です。 – Chris

答えて

1

あなたが言及しているという事実完全修飾ドメイン名。

http://omnicloud.me/signup

はあなたがページをロードしているところが異なるドメインからサーバーを呼び出していることを、あなたは、クロスドメイン名、ブラウザの制限に実行されていることを私に示唆しています。 、

同じサーバー上の

/signup 

ieuse

ではなく、使用して、それはあなたがページをロードしている場所と同じdomianを使用して動作させるために最初に試す - クロスドメインは可能ですが、より多くの設定が必要http://omni....部分。

+0

いいえいいえ、サインアップページのURLはそうです。だから、もしこれがゲットならば、Djangoはサインアップページをレンダリングして返します。それがAJAXリクエストであれば、データベースのすべての処理を行います – Chris

+0

サインアップに特化したDjangoビューを追加しました。それはあなたが意味することですか? – Chris

+1

クロスドメインの意味は、あなたのHTMLとJquery JSが1つのドメイン名から投稿され、AJAX呼び出しが別のドメイン(例えばomnicloud.me)のサインアップページにアクセスしているということです - 現代のブラウザはデフォルトのAjax HTMLが送られたサーバーとは別のサーバーに行くように要求します。 – Soren

関連する問題