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

标签 javascript php jquery html ajax

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

我在网站上有这样的结构:

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

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

问题是如果用户输入其他页面的 URL 而不是点击 anchor 我们该怎么办?例如,如果用户输入:http://example.com/pages/about 那么只有该页面的元素才会加载,而不需要主页的资源和脚本。

我认为解决方案是这样的:

  1. 检测用户是否输入 URL 而不是点击 anchor 。(检测 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.同时具有 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/

相关文章:

javascript - 如何在 react js中保留浏览器后退按钮上应用的过滤器

javascript - jQuery if..else 基于hash id 提取的条件语句

javascript - 如何在考勤管理系统的数据库中保存当前、缺勤的学生名单?

jquery - 如何使用 Jquery 将文本更改为 div

jquery - 设置 $.prop() 而不触发更改

javascript - 将自定义服务插入 UI 路由

javascript - 如何根据内容更改 div 类?

php - 来自 android 的实时 javascript 请求或从 Controller Cakephp/php 调用 javascript 函数

php - 谁能用 PHP -> $a{0} = "value"解释这个数组声明

javascript - 将列表项设置为负顶部的动画会使其他列表项下降