我目前面临的情况可能很复杂,我会花时间把我的问题解释清楚。在
我使用django v1.8
我有一个显示结果列表的视图,这个视图专用的模板,我添加了ajax方法来快速过滤当前的结果。 一切正常,但只有当页面被手动刷新时,ajax才被清除,我知道这是正常的,我想做的是更改浏览器的URL。在
我的文件.js公司名称:
$(function(){
$('#filter').change(function() {
$.ajax({
type: "POST",
url: "/find/object/filter/",
data: {
'preference': $('#preference').val(),
'city': $('#hsearch').val(),
'spec': $('#mplspecialite').val(),
'mplace': $('#mplace').val(),
'filter': $('#filter').val(),
'csrfmiddlewaretoken': $("input[name=csrfmiddlewaretoken]").val()
},
success: searchResult,
dataType: 'html'
});
});
});
function searchResult(data, textStatus, jqXHR)
{
$('#dynamic-results').html(data);
}
阿贾克斯视图.py公司名称:
^{pr2}$我的搜索view.py
(在此视图中重定向所有ajax参数send):
def search_something(request):
args = {}
# code
# code
# code
if request.method == 'GET':
if 'city' in request.GET or 'partner' in request.GET\
or 'filter' in request.GET:
q_city = request.GET.get('city', False)
q_preference = request.GET.get('preference', False)
q_speciality = request.GET.get('speciality', False)
q_partner_name = request.GET.get('partner', False)
q_filter = request.GET.get('filter', False)
args['results'] = args['ctx']
if q_city:
args['results'] = args['results'].filter(
city__name__icontains=q_city)
if q_preference:
args['results'] = args['results'].filter(service=q_preference)
if q_partner_name:
args['results'] = args['results'].filter(
name__icontains=q_partner_name)
if q_filter:
if q_filter == '1':
args['results'] = args['results'].order_by('min_to_order')
elif q_filter == '2':
args['results'] = args['results'].order_by('mark')
elif q_filter == '3':
args['results'] = args['results'].order_by('remarq')
elif q_filter == '4':
args['results'] = args['results'].order_by('name')
if args['results'].count() > 1:
args['filterform'] = SearchFilterForm()
del args['ctx']
template_name = 'something/snippets/'\
'ajax_object_search.html'
return render_to_response(
template_name,
args,
context_instance=RequestContext(request)
)
ajax调用时如何更新浏览器url?在
可以通过使用
history.replaceState
编辑历史记录条目,以编程方式更改浏览器URL。它实际上与history.pushState
相同,只是pushState
添加了一个浏览器历史记录条目,replaceState
修改了当前条目。我将继续pushState
。在作为一个警告,如果不是绝对需要的话,你会让自己面对更多的复杂性。这是因为如果有人在历史中向后导航,您必须实现修改页面的行为。在
history
位于DOMwindow
对象下。在someState
是与该浏览器历史记录条目关联的对象。 e、 g.{ city: "London", lon: 51.5072, lat: 0.1275 }
第一个参数(
someState
)随后在历史更改时触发popstate
事件时提供。另一个警告是,当重新加载浏览器时,不应依赖popstate
事件,因为根据浏览器,可能会触发也可能不会。从history.state
获取state对象,而不是依赖于被激发的事件。在中间参数可以是空字符串,也可以是您选择的字符串,浏览器暂时忽略它。在
最后一个参数是您要放入浏览器历史记录中的URL,它可以是绝对的也可以是相对的。它不会被浏览器加载。在
更具体地说: 您可以在AJAX请求的成功回调中使用
pushState
,该回调将请求中发送的数据推送到历史条目中。当用户向后导航或重新加载页面时,可以将这些数据拉回来并再次用于发送AJAX请求。在如果您预计您将要做更多这方面的工作,您可能需要查看浏览器中的路由库。在
祝你好运!在
您可以阅读有关HTML5PushState here的更多信息。在
编辑:回复评论。在
^{pr2}$相关问题 更多 >
编程相关推荐