没有返回ajax响应?

时间:2014-01-29 06:53:41

标签: jquery python ajax django

您好我正在使用django框架。 ajax响应不起作用。 我尝试了如下代码。 views.py

def ForgotUsername(request):
    if request.method=="POST":
        email=request.POST['email']
        usr=User.objects.all()
        question=""
        for i in usr:
            if email in i.email:
                id_email=i.id
                que=securityquestions.objects.get(user_id=i.id)
                question+=que.question   
        q={'question':question}
        return HttpResponse(json.dumps(q),mimetype='application/json')

    else:
        return render(request,'registration/ForgotPassword.html')

HTML:

$("#email1").change(function()
            {
                var emailstring = $("#email1").val();
                var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
                if (!emailReg.test(emailstring))
                    {
                        $("#emailalert").html('<div class="alert alert-error"><button class="close" data-dismiss="alert" type="button">×</button>Not a valid Email</div>');
                        return false;
                    }
                else
                    {
                        $.ajax({
                            type:'POST',data:{email:emailstring},
                            url:'/registration/ForgotUsername/',
                            datatype:'json',
                            success:function(data) {
                                alert("email exists");
                                alert(data);
                                $('#ques').val(data);
                            }
                        });
                        return true;
                    }

            });

在此ID中,“email1”是电子邮件输入字段名称。 我的ajax响应是在一个单独的页面中打印输出。它没有返回对ajax的响应。帮我继续

2 个答案:

答案 0 :(得分:1)

通过csrf_token。

你的AJAX响应应该是

var CSRF_TOKEN = document.getElementsByName('csrfmiddlewaretoken')[0].value
$.ajax({
          type:'POST',data:{email:emailstring, csrfmiddlewaretoken: CSRF_TOKEN },
          url:'/registration/ForgotUsername/',
          datatype:'json',
          success:function(data) {
              alert("email exists");
              alert(data);
              $('#ques').val(data);
       }

答案 1 :(得分:0)

为了快速实现这一点,不是最好的,你可以将{%csrf_token%}添加到表单中,并通过序列化将整个表单传递给你的ajax请求:

var yourForm = $("#your-form-id");

$.ajax({
    type:'POST',data:yourForm.serialize(),
    url:'/registration/ForgotUsername/',
    datatype:'json',
    success:function(data) {
        alert("email exists");
        alert(data);
        $('#ques').val(data);
    }
});

序列化会将包括csrf_token在内的所有表单元素转换为所需的数据格式。