1

我正在尝试在弹出窗口/模式中加载新内容(登录/线程创建/线程视图/快速搜索),但也使用 pushState 更改 URI。

现在,我已经了解了一般概念,但对确切的机制有点困惑。

我在浏览网站时发现了 www.usatoday.com/news。我做了一些研究,似乎他们使用 pushState 来更改 URI 并通过 AJAX 在模态窗口中加载内容。

我的问题具体涉及如何在模式窗口中拉出和显示“新页面”。很明显,您需要一个新的控制器来显示正确的 URI 并使其可共享/可抓取。但是是否可以获取该页面并直接以模式显示?还是您必须在全新的 ajax 驱动模型/视图中处理信息?

4

1 回答 1

1

你用的是什么模态?例如,如果您使用的是 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
}

}

于 2013-01-14T15:23:11.273 回答