2011-02-16 50 views
1

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

我调试了视图并作了一个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") 

results.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), 
... 
+0

我有点困惑,你说问题是它会去/反馈/除了这是你张贴在你的jQuery? – Kekoa 2011-02-16 17:06:39

+0

是的,我希望它去反馈,但没有在另一个页面显示响应。 – 2011-02-16 17:28:58

回答

-1

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

编辑另一个JS错误是你没有把{{ query }}{{ bp }}加引号。他们可能会或可能不是有效的JS对象,如果不是,该功能将失败,永远不会到达return false