我有python / django app,需要搜索引擎和搜索引擎我使用jquery的力量。我对Jquery(实际上是完整的Javascript)还是一个新手,但我认为这似乎是正确的,我不确定为什么这不会起作用。
所以我有这段代码:
<li class="nav-header">search for community</li>
{% csrf_token %}
<input type="text" id="search" name="search" />
<ul id="search-results">
</ul>
我有输入ID搜索。和另一个id搜索结果。 然后我有这个javascript文件。
$(function(){
$('#search').keyup(function() {
$.ajax({
type: "POST",
url: "/search/",
data: {
'search_text' : $('#search').val(),
'csrfmiddlewaretoken' : $("input[name=csrfmiddlewaretoken]").val()
},
success: searchSuccess,
dataType: 'html'
});
});
});();
function searchSuccess(data, textStatus, jqXHR)
{
$('#search-results').html(data);
}
我在这里匹配ID搜索。使用keyup功能。是因为功能错了吗?它不太可能,因为整个工作正常。整个事情,我的意思是搜索的功能在这里工作http://127.0.0.1:8000/search/,其中包含search.html
{% extends 'base.html' %}
{% block content %}
<h2>Search</h2>
<form method="get" action=".">
<table>
{{ form.as_table }}
<tr>
<td> </td>
<td>
<input type="submit" value="Search">
</td>
</tr>
</table>
{% if query %}
<h3>Results</h3>
{% for result in page.object_list %}
<p>
<a href="{{ result.object.get_absolute_url }}">{{ result.object.name }}</a>
</p>
{% empty %}
<p>No results found.</p>
{% endfor %}
{% if page.has_previous or page.has_next %}
<div>
{% if page.has_previous %}<a href="?q={{ query }}&page={{ page.previous_page_number }}">{% endif %}« Previous{% if page.has_previous %}</a>{% endif %}
|
{% if page.has_next %}<a href="?q={{ query }}&page={{ page.next_page_number }}">{% endif %}Next »{% if page.has_next %}</a>{% endif %}
</div>
{% endif %}
{% else %}
{# Show some example queries to run, maybe query syntax, something else? #}
{% endif %}
</form>
{%endblock%}
我尝试使用search.html中有效的方法在index.html的搜索栏中使用Jquery keyup函数。 你能告诉我为什么我不能使用匹配id的jquery函数吗?
详细信息:这是我的代码的工作方式
在urls.py里面
我有url(r'^search/$',include('haystack.urls')),
和其他干草堆设置。
然后在views.py
def search_titles(request):
categories = SearchQuerySet().autocomplete(content_auto=request.POST.get('search_text', ''))
return render_to_response('ajax_search.html', {'categories' : categories
})
for ajax_search.html
{% if categories.count > 0 %}
{% for category in categories %}
<li><a href="/category/{{post.category}}">{{ category.title }}</a></li>
{% endfor %}
{% else %}
<li>None to show!</li>
{% endif %}
问题出现在ajax我几乎可以肯定
答案 0 :(得分:1)
如果你只是练习AJAX,你的方法还可以,但是jQuery有a neat method来做这个..
$(function(){
$('#search').keyup(function() {
$('#search-results').load("/search/", {
'search_text' : $('#search').val(),
'csrfmiddlewaretoken' : $("input[name=csrfmiddlewaretoken]").val()
});
});
});
答案 1 :(得分:0)
您是否已检入开发人员工具(Chrome)?如果您转到网络选项卡,然后单击XHR,您将获得当前页面的所有ajax请求。
现在,当您找到您的请求时,请单击它并转到&#34;响应&#34;。如果使用HTTP代码20x或304,您将获得正确的响应。如果没有,服务器不知道如何处理您的请求(404)或发生服务器错误(500)。
如果您正在获得正确的响应,请尝试在该回调中添加console.log。您应该看到脚本返回的内容。
Ajax永远不会受到责备,ajax只是隐藏客户端的方法&gt;服务器通信。它是客户端脚本如何处理事物或服务器端脚本如何处理事物。
答案 2 :(得分:0)
我看到这还没有得到解决。
我通常这样做的方法是在加载JS文件之前设置全局站点根目录,或者generating an url for your search url。然后在您的javascript文件中,只使用您之前设置的全局变量。我不知道django所以下面的代码可能有错误。
<script type='text/javascript'>var ROOT= {{ build_absolute_uri('/')|escapejs }};</script>
<script src='{% url search_script %}'></script>