在我的Django应用程序中,我希望能够发布并获得相同的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)
这样我首先发布值username。如果用户名已经存在结果更改,那么我就明白了。
诀窍是在get请求中放置一个post请求。
答案 0 :(得分: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'
这样,您的成功消息将通过成功处理程序进行路由,您的错误将通过错误处理程序进行路由。
答案 1 :(得分:1)
如果使用 get 表示GET
方法,为什么不直接在url参数中添加查询?
var username = $('#username').val()
$.post('/auth_validate?myvar=thevalue', {'username': username}, function(data) {
// Get Request to get something.
}
但也许我误解了这个问题......
答案 2 :(得分:0)
您可以返回一个http代码400(错误请求)并为您post
请求添加错误处理程序,这应该可以解决问题。
我对django不太熟悉,所以我只是给你一个抽象的想法。
答案 3 :(得分:0)