如果不是ajax请求,则响应不同的html


Respond different html if it's not ajax request

我以前问过这个问题,我得到了几个负分数,但这次我问得更清楚。

我在一个网站上有这样一个结构:

  • 主页(所有资源和脚本都在本页)
    • 所有其他页面(HTML只包含该特定页面的元素)

如果用户点击主页面锚定到其他页面,则嵌入On click event的AJAX函数将运行,并且URL地址将使用Window.history.PushState更改。

问题是我们能做什么,如果用户输入其他页面的URL,而不是点击锚?例如,用户输入:http://example.com/pages/about然后只加载该页面的元素,而不需要mainpage的资源和脚本。

我想到了这样一个解决方案:

  1. 检测用户是否输入URL而不是点击锚。(检测HTTP请求)
  2. 如果是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。链接上面的PHP脚本文件的页面,有AJAX和HTTP请求。在我的例子中,我把它放在所有其他页面而不是主页。

<?php include "../script.php"; ?>

3。配置您的web服务器以支持HTML文件扩展名中的PHP脚本。我的web服务器是Apache,所以我在。htaccess文件中写了这一行。

AddType application/x-httpd-php .htm .html