$ ajax命令和Json响应

在我的django应用程序中,我尝试使用ajax来检查用户名是否已经存在,如果是这种情况则显示错误。

这就是我所拥有的

HTML:

{% csrf_token %}

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 ,而不是在successerror回调中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。