首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Django实现ajax表单

用Django实现ajax表单
EN

Stack Overflow用户
提问于 2011-02-16 16:59:26
回答 1查看 676关注 0票数 1

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

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

views.py:

代码语言:javascript
运行
复制
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") 

results.html:

代码语言:javascript
运行
复制
<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:

代码语言:javascript
运行
复制
... 
(r'^feedback/$', views.ajax_feedback), 
(r'^results/(?P<query>.+)/$', views.results), 
... 
EN

回答 1

Stack Overflow用户

发布于 2011-02-16 17:06:59

success函数声明之后,有一个缺少的紧凑型大括号。正因为如此,永远无法到达return false,并且浏览器通过普通的HTTP请求提交表单--这就是为什么当它到达视图时它不是Ajax调用。

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5019515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档