2011-12-06 3 views
0

나는 onsubmit 호출되는 자바 스크립트 함수를 가진 문제 : 백엔드에(장고, JS, 아약스)

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").value}, 
    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 
    } 
    }, 
headers: ajaxHeaders //settings for ajax request 
}); 

return !($('#passAlert').value == "Sorry, that username is already taken") 
} 

:

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)) 

답변

2

A in Ajax는 비동기를 나타냅니다. 제공 한 성공 함수는 즉시 실행되지 않으며 브라우저가 서버에서 응답을 얻은 후 호출됩니다. usernameCheck() 함수에서 반환 한 이후에 이됩니다.

반환 값으로이 검사를 수행 할 수 없으므로 콜백을 사용해야합니다.

+0

많은 의미가 있습니다. Sjax가 있습니까? 아니면 콜백이 어떻게 생겼는지에 대해 좀 더 자세히 설명 할 수 있습니까? 이것은 서버 또는 클라이언트 측 문제입니까? – Chris

+0

그것은 클라이언트 측 문제입니다. 예, 동기 호출을 할 수 있지만 브라우저가 서버의 응답을받을 때까지 멈추기 때문에 최종 사용자에게는 끔찍한 일입니다. – Jim

+0

코드가 비동기입니다. 라인별로 순서대로 실행되지 않습니다. 그것의 일부를 실행하고, 나중에 성공 핸들러를 저장하고, 계속 진행하고, 나중에 나중에 성공 핸들러를 호출합니다. 코드는 라인 단위로 순차적으로 실행된다고 가정하여 작성됩니다. 이게 문제 야. 이런 식으로 실행되지 않는다는 것을 고려하여 코드를 재구성해야합니다. – Jim