热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP判断一个请求是Ajax请求还是普通请求

Javascript中大多数的框架如jquery(jqueryui、jqueryeasyui)、Mootools等,在发出Ajax请求时,都会发送额外的HTTP_X_REQUESTED_WITH头部信息

Javascript中大多数的框架如 jquery(jquery ui、jquery easyui)、Mootools 等,在发出 Ajax 请求时,都会发送额外的 HTTP_X_REQUESTED_WITH 头部信息,因此每当发送一个ajax请求你就可以在服务器端侦测到是 Ajax 请求;

1、通过传递_GET参数的方法简单实现网页请求的判断。

url上这么传递:*******.php?ajax

php这么判断:

if(isset($_GET['ajax'])){
	...这是一个ajax请求,然后...
}
else{
	...这不是一个ajax请求,然后...
}


这种实现方法很差劲,相当容易容易容易伪造。判断和不判断没有任何区别。


所以又出来一种自认为很科学的处理方式,这种方式确实有一定的学习价值。

2、通过PHP获取预定义变量中的XMLHttpRequest判读。

首先你必须使用jquery或Js发送ajax请求,通过jquery发送的$.ajax, $.get or $.post方法请求网页内容时,它会向服务器传递一个HTTP_X_REQUESTED_WITH的参数,这个参数的值是XMLHttpRequest。

代码:

beforeSend : function (XMLHttpRequest) {

    XMLHttpRequest.setRequestHeader("X_Requested_With","XMLHttpRequest");

};

参数名X_Requested_With,参数值XMLHttpRequest,你可以任意定义。Php取得时候要在参数名前面加上大写的http字样(即一个“HTTP_”前缀)然后“X_Requested_With”这个变量全部大写(一定要大写),然后再$_SERVER这个超级变量中找就可以了。

代码:

/**
 * 判断是否Ajax请求
 */
function is_ajax_request(){
    if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
    {
        return true;
    }
    else
    {
        return false;
    }
}

如果你的jquery请求是通过iframe打开网页的,那么HTTP_X_REQUESTED_WITH参数不会被传递,也就是说你没有办法判断请求的类型。

IE5,IE6老版本的浏览器中$.ajax, $.get or $.post方法不会自动发送HTTP_X_REQUESTED_WITH的参数到头部信息,因此PHP中也是无法获取参数进行判断。除非你自己构造XMLHttpRequest对象出来,然后再发送给php脚本,相当于用最原始的Js实现ajax功能。但这样的话jquery框架本来封装好的ajax就失去意义了。

其它:PHP判断一个请求是AJAX请求还是普通请求

通过jquery的$.ajax()方法,可以轻松地在发送ajax请求之前,创建我们自定义的header头信息。

$.ajax({
    type : "GET",
    url : base_url + 'php_check_ajax_request/get_user_list.html',
    beforeSend : function (XMLHttpRequest) {
        XMLHttpRequest.setRequestHeader("request_type","ajax");
    },
    success : function(data){
        $("#user_list").html(data);
        $tip.hide();
        $button.attr('disabled',true);
    }
});

那么在php中就应该这样取得:

$_SERVER['HTTP_REQUEST_TYPE']



推荐阅读
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • Spring Boot 中静态资源映射详解
    本文深入探讨了 Spring Boot 如何简化 Web 应用中的静态资源管理,包括默认的静态资源映射规则、WebJars 的使用以及静态首页的处理方法。通过本文,您将了解如何高效地管理和引用静态资源。 ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
  • 理解文档对象模型(DOM)
    本文介绍了文档对象模型(DOM)的基本概念,包括其作为HTML文档的节点树结构,以及如何通过JavaScript操作DOM来实现网页的动态交互。 ... [详细]
  • 本文深入探讨了JavaScript中实现继承的四种常见方法,包括原型链继承、构造函数继承、组合继承和寄生组合继承。对于正在学习或从事Web前端开发的技术人员来说,理解这些继承模式对于提高代码质量和维护性至关重要。 ... [详细]
  • 本文探讨了如何通过WebBrowser控件在用户点击输入框时自动显示图片验证码。该过程可能涉及JavaScript事件的触发与响应。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文介绍了一段使用jQuery实现的用户注册页面表单验证代码,适用于前端开发人员学习和参考。该示例结合了HTML、CSS和JavaScript,确保用户输入的数据格式正确。 ... [详细]
  • 在现代Web应用中,当用户滚动到页面底部时,自动加载更多内容的功能变得越来越普遍。这种无刷新加载技术不仅提升了用户体验,还优化了页面性能。本文将探讨如何实现这一功能,并介绍一些实际应用案例。 ... [详细]
  • 探讨了如何解决Ajax请求响应时间过长的问题。本文分析了一个从服务器获取少量数据的Ajax请求,尽管服务器已经对JSON响应进行了缓存,但实际响应时间仍然不稳定。 ... [详细]
  • 在PHP后端开发中遇到一个难题:通过第三方类文件发送短信功能返回的JSON字符串无法解析。本文将探讨可能的原因并提供解决方案。 ... [详细]
  • 本文详细介绍了如何使用 HTML 和 CSS 对文件上传按钮进行样式美化,使用户界面更加友好和美观。 ... [详细]
author-avatar
蔚-然之林
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有