使用 Django 实现 ajax 表单

Posted

技术标签:

【中文标题】使用 Django 实现 ajax 表单【英文标题】:Implementing an ajax form with Django 【发布时间】:2011-06-28 12:25:34 【问题描述】:

我遇到的问题是,当我提交表单时, 响应被放置在一个新的 url(/feedback) 中,而不是放在 实际(/结果)网址。警报永远不会被执行。 我想我在模板中做错了,但我找不到解决方案。

我调试了视图并做了一个request.is_ajax(),它返回了False。

views.py:

def ajax_feedback(request): 
    success = False 
    if request.method == "POST": 
        post = request.POST.copy() 
        if post.has_key('rel') and post.has_key('relp'): 
                rel = post['rel'] 
                relp = post['relp'] 
                q = post['query'] 
                fq = post['full_query'] 
                fq = fq[:350] 
                ip = request.META['REMOTE_ADDR'] 
                feedback = FeedBack(q=q, ip_address=ip,
                                   user=request.user, relevance=rel, rel_pages=relp, 
                                   full_query=fq) 
                feedback.save() 
                success = True 
    if success == True: 
        return HttpResponse("Success") 
    else: 
        return HttpResponse("Error") 

结果.html

<form method="post" action="/feedback/" id="feedback_form"> 
    <input type="radio" name="rel" value="yes" id="rel" /> Yes<br /> 
    <input type="radio" name="rel" value="no" id="rel" /> No 
    <input type="radio" name="relp" value="1-5" id="relp" /> 1-5 <br /> 
    <input type="radio" name="relp" value="6-10" id="relp" /> 6-10 
    <input type="hidden" name="query" value=" query "> 
    <input type="hidden" name="full_query" value=" bq "> 
    <input id="create" type="submit" value="Send"> 
</form> 
<script> 
      var create_note = function()  
      var rel = $("#rel").val() 
      var relp = $("#relp").val() 
      var query =  query  
      var full_query =  bq  
      var data =  rel:rel, relp:relp, query:query, full_query:full_query ; 
      var args =  
            type: "POST", 
            url: "/feedback/", 
            data: data, 
            success: function(msg) 
                 alert(msg); 
            
       
      $.ajax(args); 
      return false; 
    ; 
    $("#create").click(create_note); 
</script> 

urls.py:

... 
(r'^feedback/$', views.ajax_feedback), 
(r'^results/(?P<query>.+)/$', views.results), 
... 

【问题讨论】:

我有点困惑,你说问题是它会去 /feedback/ 除了你在 jQuery 中发布的内容吗? 是的,我希望它去反馈,但不在另一个页面中显示响应。 【参考方案1】:

success 函数声明后缺少右括号。因此,永远不会到达return false,并且您的浏览器通过正常的 HTTP 请求提交表单 - 这就是为什么当它到达您的视图时它不是 Ajax 调用。

编辑 另一个 JS 错误是您没有将 query bp 放在引号中。它们可能是也可能不是有效的 JS 对象,如果不是,函数将失败并且永远不会到达 return false

【讨论】:

这里缺少的右大括号在代码中。对不起,我编辑了帖子,我一定是误删了。

以上是关于使用 Django 实现 ajax 表单的主要内容,如果未能解决你的问题,请参考以下文章

使用 django-allauth 实现 Ajax 请求/响应

Django使用Ajax实现页面无刷新评论回复功能

python测试开发django-178.ajax实现form表单文件上传

Django ajax——当我使用 Ajax、Django 发送表单时为空 request.FILE

使用 django 和 ajax 显示表单错误

使用 jquery/ajax 更新 django 表单