[英]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.