Django jquery ajax

2024-04-26 17:36:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前面临的情况可能很复杂,我会花时间把我的问题解释清楚。在

我使用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?在


Tags: namefalsecitypartnergetifrequestargs
1条回答
网友
1楼 · 发布于 2024-04-26 17:36:57

可以通过使用history.replaceState编辑历史记录条目,以编程方式更改浏览器URL。它实际上与history.pushState相同,只是pushState添加了一个浏览器历史记录条目,replaceState修改了当前条目。我将继续pushState。在

作为一个警告,如果不是绝对需要的话,你会让自己面对更多的复杂性。这是因为如果有人在历史中向后导航,您必须实现修改页面的行为。在

history位于DOMwindow对象下。在

history.pushState(someState, "some title", "page.html");

someState是与该浏览器历史记录条目关联的对象。 e、 g.{ city: "London", lon: 51.5072, lat: 0.1275 }

第一个参数(someState)随后在历史更改时触发popstate事件时提供。另一个警告是,当重新加载浏览器时,不应依赖popstate事件,因为根据浏览器,可能会触发也可能不会。从history.state获取state对象,而不是依赖于被激发的事件。在

中间参数可以是空字符串,也可以是您选择的字符串,浏览器暂时忽略它。在

最后一个参数是您要放入浏览器历史记录中的URL,它可以是绝对的也可以是相对的。它不会被浏览器加载。在

更具体地说: 您可以在AJAX请求的成功回调中使用pushState,该回调将请求中发送的数据推送到历史条目中。当用户向后导航或重新加载页面时,可以将这些数据拉回来并再次用于发送AJAX请求。在

如果您预计您将要做更多这方面的工作,您可能需要查看浏览器中的路由库。在

祝你好运!在

您可以阅读有关HTML5PushState here的更多信息。在

编辑:回复评论。在

^{pr2}$

相关问题 更多 >