【发布时间】:2026-02-14 14:20:04
【问题描述】:
我正在尝试将一个简单的 AJAX 功能与 Django 结合起来,但我不知道我做错了什么。 request.is_ajax() 正在返回 False,即使我返回 event.preventDefault(),表单仍在提交中。
这里是视图:
def search(request):
if request.is_ajax():
search_text = request.POST.get('search_text', False)
else:
search_text = 'Not AJAX'
return HttpResponse(search_text)
JS:
$(function(){
$('#search_form').submit(function(event){
event.preventDefault();
$.ajax({
type: 'post',
url: {% url 'users:search' %},
dataType: 'html',
data: {
'search_text': $('#search').val(),
'csrfmiddlewaretoken': '{{ csrf_token }}'
},
success: function(data){
$('#search-results').html(data);
},
failure: function(data){
alert('Got an error');
}
});
return false;
});
});
还有 HTML:
<div class="col-md-4">
<h5>Search</h5>
<form action="{% url 'users:search' %}" method="POST" id="search_form" name="search_form">
{% csrf_token %}
<input type="text" id="search" name="search">
<input type="submit" value="Search">
</form>
<ul id="search-results">
{% if users %}
{% for user in users %}
<li><a href="{% url 'users:detail' user.id %}">{{ user.username }}</a></li>
{% endfor %}
{% else %}
<p>No user available</p>
{% endif %}
</ul>
</div>
【问题讨论】:
-
该视图的 url 模式是什么?
-
url(r^'search/$', views.search, name='search') -
正如@ppetrid 在我的回答中所评论的那样,需要澄清您的 js 代码在哪里。它在html模板中吗?如果答案是肯定的,那么请更新您的问题以反映这一点。
-
它不在模板中,模板标签是一个愚蠢的错误。更改它们后,它仍然无法正常工作。仍然将我发送到返回
Not AJAX的新页面
标签: javascript jquery python ajax django