繁体   English   中英

在使用jquery-pjax时,如何强制一个链接完成整页加载

[英]While using jquery-pjax how can I force one link to do full page load

我的应用程序使用jquery-pjax,并且对所有页面都适用,除了其中包含一些<script>标记的页面之外,这些页面没有执行,因为jquery-pjax只是将返回的内容放置在一个元素中,而没有执行该内容内部的元素。

我想解决这个问题。 当用户尝试通过单击来加载此页面时,我只想绕过jquery-pjax功能并进行完整页面加载。 我该怎么做? 我能以某种方式在元素上指出这一点吗?

我看到github上有多种jquery-pjax。 我使用了“德芬克特”版本在这里 也有yiisoft版本在这里 Yiisoft版本是从defunkt版本派生的。

我使用的是defunkt版本,但是yiisoft版本似乎具有内置功能,可以抑制我的第二个答案中描述的链接的pjax功能。

绕过jquery-pjax功能的一种方法是创建<a>元素,以便它使用onclick()事件加载页面而不是href。

使用jquery-pjax的链接:

<a href="/page_url">Pjax Page</a>

绕过jquery-pjax的链接:

<script language="javascript" type="text/javascript">
    function load_page() {
        window.location.href = "/page_url";
    }
</script>
<a onclick="load_page();">non-Pjax Page</a>

如果您使用yiisoft jquery-pjax ,则可以将“ data-pjax ='0'”作为属性添加到<a>元素,以抑制pjax功能。 defunkt版本的pjax不提供此功能。

我之前给出的两个答案需要更改无法与pjax一起正常使用的页面的<a>元素。 这种方法的缺点是,可能很难找到站点上链接到特定页面的每个<a>。

在服务器端运行并且不需要更改<a>元素的另一种方法是,在准备对受影响页面的响应时,尽早删除标头标签“ X-PJAX”。 这是Asp.Net MVC的此想法的实现:

创建扩展方法:

Imports System.Runtime.CompilerServices

Module PjaxExtension

    <Extension()>
    Public Sub DisablePjax(ByVal c As Controller)
        c.Request.Headers.Remove("X-PJAX")
    End Sub

End Module

在顶部的控制器中:

Imports MyWebSite.PjaxExtension

在控制器的操作方法中:

DisablePjax()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM