我的应用程序使用jquery-pjax,它适用于所有页面,除了内容包含一些<脚本>由于jquery-pjax只是将返回的内容放在元素中而不执行内容中的元素,因此未执行的标记。
我想解决这个问题。当用户通过单击它来尝试加载此页面时,我只想绕过jquery-pjax功能并执行整页加载。我怎么能做到这一点?我可以以某种方式在元素上表明这一点吗?
我看到github上有多种jquery-pjax。我正在使用“defunkt”版本here。还有yiisoft版本here。 Yiisoft版本是从defunkt版本开始的。
我使用的是defunkt版本,但是yiisoft版本似乎有一个内置功能来抑制第二个答案中描述的链接的pjax功能。
答案 0 :(得分:1)
绕过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>
答案 1 :(得分:0)
如果您正在使用yiisoft jquery-pjax,则可以添加&#34; data-pjax =&#39; 0&#39;&#34;作为&lt;的属性a&gt;用于抑制pjax功能的元素。 pjax的defunkt version中未提供此功能。
答案 2 :(得分:0)
我之前给出的两个答案需要更改&lt; a&gt;与pjax无法正常工作的页面元素。这种方法的缺点是可能很难找到每个&lt; a&gt;在您的网站上链接到特定页面。
另一种运行服务器端的方法,不需要更改&lt; a&gt; elements是在准备对受影响页面的响应时尽早删除标题标记“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()