2014-01-29 123 views
0

您好我正在使用django框架。 ajax响应不起作用。 我尝试过的代码如下。 views.py不返回Ajax响应?

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-\.][email protected]([\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

你应该通过'csrf_token'。 'https:// docs.djangoproject.com/en/dev/ref/contrib/csrf /' –

+0

在我的表单中,我添加了{%csrf_token%} – Madanika

+0

,但您不会传递它。 – scriptmonster

回答

1

PASS 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); 
     } 
+0

不错的答案:),简单实用。 – scriptmonster

+0

是的,我已经添加,但仍然没有得到。其实我已经写过关于改变事件。在我的表单中,我有输入电子邮件字段,旁边的安全问题获取字段来恢复我的密码。 – Madanika

+0

虽然我给标签电子邮件验证错误,我显示..但不是问题得到显示在安全问题标记字段 – Madanika

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成所需的数据格式。

+0

是的,我已经添加,但仍然没有得到。其实我已经写过关于改变事件。在我的表单中我有输入电子邮件字段,旁边的安全问题获取字段来恢复我的密码 – Madanika

+0

虽然我给标签电子邮件验证错误我显示..但不是问题是显示在安全问题标签字段 – Madanika