2012-12-19 16 views
4

在我的Django應用程序中,我希望能夠發佈並獲得相同的jQuery請求。發佈並獲得相同的jQuery請求

我的HTML:

<form method="post" id='validation_form'> 
    {% csrf_token %} 
     <input id='username' type="text" name="username" value=""/> 
     <button type="submit">Submit</button> 
    </form> 

JS:

var username = $('#username').val() 
    $.post('/auth_validate', {'username': username}, function(data) { 
    // Get Request to get something. 
    } 

瀏覽:

def auth_validate(request): 
     error = False 
     if request.method == 'POST': 
      username = request.POST.get('username') 

      if User.objects.filter(username__exact=username).exists(): 
       error = 'Sorry this username is already taken' 

我想獲得 '錯誤' 在我用來張貼同樣的jQuery請求。有可能這樣做嗎?

謝謝你的幫助。

編輯:這是我找到的解決方案。

JS:

function validateForm() { 
    var username = $('#username').val() 
    var result='' 
    $.get('/auth_validate_username/', {'result':result}, function(data){ 
     $.post('/auth_validate_username/', {'username': username}, function(data) { 
     $('#error_message').html(data); 
     }); 
    }); 
    return false; 
    }; 

HTML:

<form method="post" onsubmit="return validateForm();"> 
    {% csrf_token %} 
     <input id='username' type="text" name="username" value=""/> 
     <div id='error_message'></div> 
     <button type="submit">Submit</button> 
    </form> 

觀點:

def auth_validate_username(request): 
     result = '' 
     if request.method == 'POST': 
      username = request.POST.get('username') 
      if User.objects.filter(username=username): 
      result='Sorry but this name is already taken' 

    return HttpResponse(result) 

這樣,我先發布值的用戶名。如果用戶名已經存在結果更改,然後我得到它。

訣竅是在獲取請求中放置發佈請求。

+0

您的視圖中的語法錯誤,但是這可能只是一個複製和粘貼的問題,對不對? – Amberlamps

+0

是的。我糾正了它。 – Marcolac

+0

您可能會返回一個包含狀態(「一切正常」或「錯誤」)和錯誤消息(「用戶名已被佔用」,「用戶名太短/長」)的JSON響應......) –

回答

0

您可以返回一個http代碼400(錯誤請求)併爲您添加一個錯誤處理程序post請求,這應該可以做到。

我對django不是很熟悉,所以我只是給你抽象的想法。

+0

返回HTTP 500的非錯誤會讓你在Django中收到很多電子郵件錯誤報告。 –

+0

@Thomas Orozco:是的,400似乎更合適。我的錯。 –

0

我想你應該看看the dajaxAPI。這將會完成這項工作。

2

不是使用$ .post,而是使用$ .ajax命令。他們做的事情完全一樣,但$ .ajax給你更多的功能。

$.ajax({ 
    type: 'POST', 
    url: "/auth_validate", 
    data: { 
    'username': username 
    }, 
    success: function(data){ 
    //There was successfully data here! 
    }, 
    error: function(xhr, data, error){ 
    //An error was thrown! 
    } 
}); 

然後添加一行將返回略高於這條線403(或類似)的HTTP錯誤代碼(我將提供它,但我不熟悉的Django的來龍去脈):

error = 'Sorry this username is already taken' 

這樣,您的成功消息將通過成功處理程序進行路由,並且您的錯誤將通過錯誤處理程序進行路由。

+0

爲什麼downvote? –

+0

好了,它現在已經走了 –

+0

這正是OP所要求的。 – Amberlamps

1

如果用得到你的意思是GET方法,爲什麼不直接在url參數中添加你的查詢?

var username = $('#username').val() 
    $.post('/auth_validate?myvar=thevalue', {'username': username}, function(data) { 
    // Get Request to get something. 
    } 

但也許我misunderstooding問題...

相關問題