在我的 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)
这样我首先发布值用户名。如果用户名已经存在,结果会发生变化,然后我会得到它。
诀窍是将 post 请求放在 get 请求中。
最佳答案
不使用 $.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'
这样,您成功的消息将通过成功处理程序路由,而您的错误将通过错误处理程序路由。
关于javascript - 发布和获取相同的 jquery 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13955811/