我以前问过这个问题,我得到了几个负分,但这次我问得更清楚。
我在网站上有这样的结构:
- 主页(所有资源和脚本都在此页面中)
- 所有其他页面(HTML 仅包含该特定页面的元素)
如果用户点击主页 anchor 到其他页面,嵌入到 On click event
的 AJAX 函数将运行,并且 URL 地址将使用 Window.history.PushState
更改。
问题是如果用户输入其他页面的 URL 而不是点击 anchor 我们该怎么办?例如,如果用户输入:http://example.com/pages/about 那么只有该页面的元素才会加载,而不需要主页的资源和脚本。
我认为解决方案是这样的:
- 检测用户是否输入 URL 而不是点击 anchor 。(检测 HTTP 请求)
- 如果是 HTTP 请求,则加载主页中包含的资源。
这个解决方案可以采用客户端(javascript)方式吗?我也懂一点 PHP。
看看 Cloudflare 面板就明白我的意思了:https://www.cloudflare.com/a/overview
最佳答案
我做了一些研究(感谢评论),这是我更好的解决方案。我不想更改标记,因此模板引擎不是我的选择。
1.编写此 PHP 脚本并将其保存在 PHP 文件中。
<?php
/* Detect AJAX */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
/* If it is AJAX do this */
}
else {
/* If it is not AJAX do this; In my case I did echo all scripts and resources that I wanted to be in AJAX addresses */
echo '
<script src="example.js"></script>
';
}
2.同时具有 AJAX 和 HTTP 请求的页面中 PHP 脚本文件的链接。就我而言,我将其设置为所有其他页面,而不是主页。
<?php include "../script.php"; ?>
3.配置您的网络服务器以支持 HTML 文件扩展名中的 PHP 脚本。我的网络服务器是 Apache,所以我在 .htaccess 文件中写入了这一行。
AddType application/x-httpd-php .htm .html
关于javascript - 如果不是ajax请求则响应不同的html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33331561/