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

在PHP程序中,如何判断一个网页请求是ajax请求还是普通请求?我们在做项目中经常会存在这样一个问题,在浏览器中直接输入我ajax提交的地址后,浏览器就能直接请求数据并将数据打印到页面上。从程序的严谨性上和安全上来说,我觉得这样非常不好。

但是由于水平有限,这个问题直到今天才被我解决,特此留下文章以供有此需要的人学习。

首先说说原理:在发送ajax请求的时候,我们可以通过XMLHttpRequest这个对象,创建自定义的header头信息,如果您使用的是原生的ajax方法,也就是未使用jquery或者其他js框架包装的ajax方法,那么代码如下:

xmlHttpRequest.setRequestHeader("request_type","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);
	}
});

上面的代码中有一句:

XMLHttpRequest.setRequestHeader(“request_type”,”ajax”);

这一句代码就是向header头信息里面创建了一个我们自定义的一个变量“request_type”。这个变量在php中接收变量如下:

$_SERVER['HTTP_REQUEST_TYPE']

那么对于本文所提出的的问题,我们就可以按下面这种方式来判断用户发送的请求是哪种方式了。

<?php
if (isset($_SERVER['HTTP_REQUEST_TYPE']) && $_SERVER['HTTP_REQUEST_TYPE'] == "ajax"){
	//ajax提交
}else{
	//非ajax提交
}

需要说明的是 “request_type”这个变量值是我们自定义的,你还可以随意自定义,比如“test”,“is_ajax”等等。

您可能感兴趣的文章

  • http请求中同步请求和异步请求的区别
  • php判断字符串是否全英文,纯中文,中英文组合的方法
  • php如何判断当前的操作系统是linux还是windows
  • js如何判断鼠标滚轮是向下还是向上滚动
  • php判断日期格式是否正确的方法总结
  • php判断远程文件是否存在的办法
  • php提取身份证号码中的生日日期以及验证是否为未成年人的函数
  • 程序员和测试员之间的经典对白。这些是国外程序员总结分享的,称其上全球通用?

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索ajax
, 变量
, xmlhttprequest
, 代码
, ajax请求
, 一个
, 一句话判断
, php自定义的headers
, 普通请求
判断ajax
php判断ajax请求、php判断是否ajax请求、php 判断是ajax请求、laravel 判断ajax请求、判断ajax请求是否完成,以便于您获取更多的相关知识。

时间: 2024-06-17 10:11:32

PHP判断一个请求是AJAX请求还是普通请求的相关文章

Ajax jsonp跨域请求实现方法_AJAX相关

什么是跨域? 简单的来说,出于安全方面的考虑,页面中的JavaScript无法访问其他服务器上的数据,即"同源策略".而跨域就是通过某些手段来绕过同源策略限制,实现不同服务器之间通信的效果. 具体策略限制情况可看下表:   URL 说明 允许通信 http://www.a.com/a.js http://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.js http://www.a.com/script/b.js 同一域名下不同文件夹 允许

在php中判断一个请求是ajax请求还是普通请求的方法

/path/to/pkphp.com/script.php?ajax 在php脚本中使用如下方法判断: 复制代码 代码如下: if(isset($_GET['ajax'])) { ...这是一个ajax请求,然后... } else { ...这不是一个ajax请求,然后... } 通过传递_GET参数的方法简单实现了网页请求的判断.但是如果需要这样的功能,这个方法可能就有弊端,功能需求如下: 1.通过ajax请求的网页与普通请求的网页内容是不相同的 2.通过ajax请求的网页是为了方便用户操作

如何在PHP中判断一个网页请求是ajax请求还是普通请求

如何在PHP中判断一个网页请求是ajax请求还是普通请求?你可以通过传递参数的方法来 实现,例如使用如下网址请求:  /path/to/pkphp.com/script.php?ajax 在PHP脚本中使用如下方法判断: if(isset($_GET['ajax'])) { -这是一个ajax请求,然后- } else { -这不是一个ajax请求,然后- } 通过传递_GET参数的方法简单实现了网页请求的判断.但是如果需要这样的功能,这个 方法可能就有弊端,功能需求如下: 1.通过ajax请求

在php中判断一个请求是ajax请求还是普通请求的方法_php技巧

/path/to/pkphp.com/script.php?ajax 在php脚本中使用如下方法判断: 复制代码 代码如下: if(isset($_GET['ajax'])) { ...这是一个ajax请求,然后... } else { ...这不是一个ajax请求,然后... } 通过传递_GET参数的方法简单实现了网页请求的判断.但是如果需要这样的功能,这个方法可能就有弊端,功能需求如下: 1.通过ajax请求的网页与普通请求的网页内容是不相同的 2.通过ajax请求的网页是为了方便用户操作

php中如何判断一个网页请求是ajax请求还是普通请求_php技巧

如何在php中判断一个网页请求是ajax请求还是普通请求?你可以通过传递参数的方法来实现,例如使用如下网址请求:/path/to/pkphp.com/script.php?ajax在php脚本中使用如下方法判断: 复制代码 代码如下: if(isset($_GET['ajax'])) { ...这是一个ajax请求,然后... } else { ...这不是一个ajax请求,然后... } 通过传递_GET参数的方法简单实现了网页请求的判断.但是如果需要这样的功能,这个方法可能就有弊端,功能需求

ajax-服务器端判断了request来自Ajax请求(异步)还是传统请求(同步),怎么办?

问题描述 服务器端判断了request来自Ajax请求(异步)还是传统请求(同步),怎么办? 我猜测服务器端通过x-requested-with 请求头限制了ajax请求,请参照http://holdbelief.iteye.com/blog/528114我是在开发一个chrome插件,我目前使用ajax就获取不到json了,我应该怎样绕过限制呢? 解决方案 request.setRequestHeader http://www.cnblogs.com/chenxizhang/archive/2

怎么判断一个jsp servlet请求是通过forward跳转过来的

问题描述 想要判断一个方法的请求是forward过来的还是直接响应用户的某个操作 解决方案 转发请求时会有如javax.servlet.forward.request_uri 等属性http://jinnianshilongnian.iteye.com/blog/1752169

当jquery ajax遇上401请求的解决方法_jquery

jquery ajax是个很常用接口,而在请求时候,可能存在响应401的情况(身份认证过期或未登录),比较容易出现在混合应用上,如何进行身份认证,重发失败请求,还是值得注意的. ajax请求有两种方式 1. 回调 最常写的方式,成功失败处理以回调方式传入. $.ajax({ ajax参数... success : xxxxxx error: xxxxxx }); 2. Deferred方式 Deferred模式我在<js异步编程>有说明, ajax调用本身返回就是一个Deferred对象,成功

PHP处理Ajax请求与Ajax跨域问题

PHP判断是否为Ajax请求 我们知道,在发送ajax请求的时候,可以通过XMLHttpRequest这个对象,创建自定义的header头信息, 在jquery框架中,对于通过它的$.ajax, $.get, 或者$.post方法请求网页内容时,它会向服务器传递一个HTTP_X_REQUESTED_WITH的参数,php中就是在header一层判断是否是ajax请求,对应的根据$_SERVER['HTTP_X_REQUESTED_WITH']判断.一般情况下$_SERVER['HTTP_X_RE