Php 在模式(ajax)中加载新页面,同时使用pushState更改URI

Php 在模式(ajax)中加载新页面,同时使用pushState更改URI,php,jquery,ajax,codeigniter,Php,Jquery,Ajax,Codeigniter,我尝试在弹出窗口/模式中加载新内容(登录/线程创建/线程视图/快速搜索),但也使用pushState更改URI 现在,我已经记下了一般的概念,但对确切的机制有点困惑 我在浏览网站时发现了www.usatoday.com/news。我做了一些研究,他们似乎使用pushState来更改URI,并在模式窗口中通过AJAX加载内容 我的问题具体涉及如何在模式窗口中拉取和显示“新页面”。很明显,您需要一个新的控制器来显示正确的URI并使其可共享/可爬网。但是,有没有可能将该页面直接显示在模式中?或者您必须

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

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

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


我的问题具体涉及如何在模式窗口中拉取和显示“新页面”。很明显,您需要一个新的控制器来显示正确的URI并使其可共享/可爬网。但是,有没有可能将该页面直接显示在模式中?或者您必须在全新的ajax驱动模型/视图中压缩信息吗?

您使用的是什么模式?例如,如果您正在使用fancybox。您只需为页面的锚定链接添加一个fancybox类,页面以模式打开,所有ajax都会为您处理。然后可以在fancybox的aftershow回调函数中添加pushstate代码

还有一个afterclose回调,您可以在其中popstate或推送一个新状态以将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
}

}您使用的是什么模态?例如,如果您正在使用fancybox。您只需为页面的锚定链接添加一个fancybox类,页面以模式打开,所有ajax都会为您处理。然后可以在fancybox的aftershow回调函数中添加pushstate代码

还有一个afterclose回调,您可以在其中popstate或推送一个新状态以将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
}

}

谢谢。实际上我刚下载了colorbox。它可以工作,但我仍然很难弄清楚如何正确地传递数据。例如,如果他们进行用户搜索,我会通过URL中的GET(?q=search)传递他们的搜索。如何使用colorbox/fancybox检索该数据?您可以使用与处理非ajax请求完全相同的方式来处理uri服务器端。试一试,如果您遇到问题,请发布一些代码和您遇到问题的具体细节。如果你开始一个新问题,在这里放一个链接,我会帮你看看。谢谢,我会处理一个新问题。在他们中间是指时间。你说不需要新的控制器。例如,如果是这种情况,用户如何将特定搜索保存为收藏夹?或者另外,如果我有一个指向某个线程的链接(www.xyz.com/thread/123 this thread/),我如何更改pushstate、加载此页面,并使他们能够保存为收藏夹或共享链接。有关代码和更具体的问题,请参阅此链接:。谢谢谢谢实际上我刚下载了colorbox。它可以工作,但我仍然很难弄清楚如何正确地传递数据。例如,如果他们进行用户搜索,我会通过URL中的GET(?q=search)传递他们的搜索。如何使用colorbox/fancybox检索该数据?您可以使用与处理非ajax请求完全相同的方式来处理uri服务器端。试一试,如果您遇到问题,请发布一些代码和您遇到问题的具体细节。如果你开始一个新问题,在这里放一个链接,我会帮你看看。谢谢,我会处理一个新问题。在他们中间是指时间。你说不需要新的控制器。例如,如果是这种情况,用户如何将特定搜索保存为收藏夹?或者另外,如果我有一个指向某个线程的链接(www.xyz.com/thread/123 this thread/),我如何更改pushstate、加载此页面,并使他们能够保存为收藏夹或共享链接。有关代码和更具体的问题,请参阅此链接:。谢谢