【发布时间】:2012-12-07 00:10:44
【问题描述】:
在我的 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)
这样我首先发布值用户名。如果用户名已经存在结果更改,然后我得到它。
诀窍是将发布请求放入获取请求中。
【问题讨论】:
-
您的视图中有语法错误,但这可能只是复制和粘贴问题,对吧?
-
是的。我更正了。
-
您可以返回一个
JSON响应,其中包括状态(“一切正常”或“错误”)和错误消息(“用户名已被占用”、“用户名太短/太长”.. .) -
我不太明白。是否要通过 POST 向服务器发送一些信息并以
Sorry this username is already taken返回客户端? -
@Marcolac:那么您的标题完全具有误导性。您有一个请求(后请求),并且您正在询问如何从服务器获取答案。我不知道 Django 中的响应对象是什么样的,但它必须看起来像
response.send('Sorry. Error')。为了获得响应,Dolondro 提出了一个非常标准且很好的解决方案。
标签: javascript jquery ajax django