无法使用Django设置jquery pjax(标头未设置,但添加了GET参数)

时间:2014-11-02 05:49:09

标签: javascript jquery python django pjax

我花了一段时间调试为什么我的pjax设置不起作用 - 这是我目前所知的。 2个请求在同一秒内发生。这很奇怪,因为我在前端设置了超时3秒。

[02/Nov/2014 05:42:26] "GET /i/feed/?_pjax=%23pjax HTTP/1.1" 200 0
[02/Nov/2014 05:42:26] "GET /i/feed/ HTTP/1.1" 200 62358

在客户端:

$(document).ready(function() {
    $(document).pjax('a[data-pjax]', '#pjax',
        {'timeout': 3000});
});

在html上(存在pjax目标):

<div id="pjax" class="cl-mcont">
    {% block content %}
    {% endblock %}
</div>

此外,永远不会检测到HTTP标头。我有这个片段:

base_template = ('pjax.html' if request.META.get('HTTP-X-PJAX') 
        else 'base_v2.html')

base_template始终是base_v2.html。

我很困惑为什么pjax能够修改url,并导致额外的请求被发送,但同时,没有正确设置标题。

任何想法都会受到赞赏。

2 个答案:

答案 0 :(得分:2)

我认为HTTP标题应该是HTTP_X_PJAX(下划线连接而不是破折号)而不是HTTP-X-PJAX。正如django docs所述:

  

请求中的任何HTTP头都将转换为META密钥,方法是将所有字符转换为大写,用下划线替换任何连字符,并在名称中添加HTTP_前缀。因此,例如,名为X-Bender的标头将映射到META密钥HTTP_X_BENDER

对于双事件(请求)触发,请确保您没有将a[data-pjax]选择器与pjax绑定两次。绑定应该只进行一次。

答案 1 :(得分:2)

添加到您的视图

print request.META

只是看看你在标题中得到了什么。