$ ajax命令和Json响应
在我的django应用程序中,我尝试使用ajax来检查用户名是否已经存在,如果是这种情况则显示错误。
这就是我所拥有的
HTML:
JS:
$('#my_form').submit(function(){ var username = $('#username').val(); if (username == ''){ alert('please enter username'); return false; } $.ajax({ type: "POST", url: "/auth_validate", data: {'username': $('#username').val(), 'csrfmiddlewaretoken': '{{csrf_token}}'}, dataType: "text", success: function(response) { var response = $.parseJSON(response); if (response.success){ return true; } else{ alert(response.error); return false; } }, error: function(rs, e) { alert(rs.responseText); return false; } }); })
观点:
def auth_validate(request): error = '' success = False if request.method == 'POST': username = request.POST.get('username', None) if not username: error = _('Please enter username') elif User.objects.filter(username__exact=username).exists(): error = _('Sorry this username is already taken') else: success = True ajax_vars = {'success': success, 'error': error} return HttpResponse(simplejson.dumps(ajax_vars), mimetype='application/javascript')
当我输入用户名(如果存在或不存在)时,会出现一个空警报,当我点击“确定”时,表单就会被提交。 而且,错误不会出现。
为什么它不起作用的任何想法?
谢谢您的帮助。
您的视图和模板看起来很好我建议您使用函数具有的本机JSON
处理并序列化表单而不是手动“发送” data
。 另请注意,在事件回调结束时return false
,而不是在success
和error
回调中return false
。
$('#my_form').on('submit', function(){ var $form = $(this); $.ajax({ type: "POST", url: "/auth_validate", data: $form.serialize(), dataType: "json", success: function(response) { if (!response.success) { alert(response.error); } else { alert('This username is available!'); } }, error: function(rs, e) { alert(rs.responseText); } }); return false; });
祝好运 :)
更新:
请检查成功回调中的else;)
由于这部分:
var response = $.parseJSON(response); if (response.success){ return true; } else{ alert(response.error); }
响应没有值“成功”,因此弹出一个emply警告对话框。 jQuery已经注意了,这个检查只在请求成功时完成,所以你不要这样做。
如果您不想使用浏览器提交的for,请添加return false;
在你的function结束时,要优先考虑浏览器的默认行为。
django响应的JSON是什么样的?
你知道哪个警报被调用了吗? 是错误function还是成功function?
我认为你不需要这条线
var response = $.parseJSON(response);
响应应该已经是JSON。