你用的是什么模态?例如,如果您使用的是 fancybox。你只需给你的页面的锚链接一个额外的fancybox类,页面就会以模式打开,所有的ajax都会为你处理。然后,您可以在 fancybox 的 aftershow 回调函数中添加您的 pushstate 代码。
还有一个关闭后回调,您可以在其中弹出状态或推送新状态以将 uri 恢复为原始状态。
如何处理从外部进入 uri 的人取决于您。但是如果您已经将该页面构建为独立链接,那么它应该不是问题。如果您希望它在fancybox 中打开,尽管您必须在doc 上为该页面准备fancybox。
您还说,很明显您必须为此配备一个新控制器。这根本不是真的,事实上我根本不会有一个单独的控制器,如果我是你,我会在 constants.php 中定义一个常量,如下所示:
define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
然后,您可以进行如下检查:
if (!IS_AJAX){
//here is code for non ajax page load, e.g load headers, footers etc that you dont need in ajax requests etc.
}else{
//often dont need this but if you have code specifically for ajax call put it here
}
}