使用 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 请求/响应
python测试开发django-178.ajax实现form表单文件上传