ajxs跨域 php_PHP项目中是如何处理Ajax请求与Ajax跨域的

PHP项目中是如何处理Ajax请求与Ajax跨域的

发布时间:2020-12-14 16:35:47

来源:亿速云

阅读:98

这期内容当中小编将会给大家带来有关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_REQUESTED_WITH']默认是XMLHttpRequest,$_SERVER['HTTP_X_REQUESTED_WITH']也可以自定义创建的,使用XMLHttpRequest.setRequestHeader(name,value)。

示例:前端页面发送普通的ajax请求给后端test.php。$.ajax({

type: "GET",

url: 'test.php',

success: function(data) {

console.log(data);

}

});

服务端test.php可以判断该请求是不是Ajax异步请求,然后根据业务需求做出响应的回应。

以下是服务端test.php的简单验证是否为ajax请求的代码:function isAjax() {

return @$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ? true : false;

}

if (isAjax()) {

echo 'Ajax Request Success.';

} else {

echo 'No.';

}

Ajax发起JSONP跨域请求

我们通过jQuery的JSONP方式可以实现跨域ajax请求,服务端php也需要做出相应的处理,也就是说php这边必须和前端页面按照一定的格式请求和返回数据。

示例:前端页面发起JSONP请求:$.ajax({

type: "get",

data: "random="+Math.random(),

url: "http://demo.jb51.net/phpajax/jsonp.php",

dataType: "jsonp",

jsonp: "callback",

success: function(data) {

console.log(data);

},

error: function() {

console.log('Request Error.');

}

});

我们会发现,ajax请求参数中有 dataType: "jsonp" 和 jsonp: "callback" ,这个就表明了我要请求的是jsonp,并且会有回调callback返回。当然,我们也可以自定义回调函数,如 jsonpCallback:"success_jsonpCallback"

还可以简单的写成:jQuery.getJSON('http://demo.jb51.net/phpajax/jsonp.php?callback=?",{

random: Math.random()

}, function(data){

console.log(data);

});

php后端服务代码可以这样写(注意输出返回的格式):$data = array(

'rand' => $_GET['random'],

'msg' => 'Success'

);

echo $_GET['callback'].'('.json_encode($data).')';

Ajax跨域请求:CORS

CORS,又称跨域资源共享,英文全称Cross-Origin Resource Sharing。假设我们想使用Ajax从a.com的页面上向b.com的页面上要点数据,通常情况由于同源策略,这种请求是不允许的,浏览器也会返回“源不匹配”的错误,所以就有了“跨域”这个说法。但是我们也有解决办法,我们可以再b.com的页面header信息中增加一行代码:header("Access-Control-Allow-Origin: *");

当我们设置的header为以上信息时,任意一个请求过来之后服务端我们都可以进行处理和响应,那么在调试工具中可以看到其头信息设置,其中见红框中有一项信息是“*Access-Control-Allow-Origin:* ”,表示我们已经启用CORS,如果要限制只允许某个域名的请求,可以这样:header("Access-Control-Allow-Origin: https://www.jb51.net");

示例:通过CORS跨域请求数据$.ajax({

type: "get",

data: "random="+Math.random(),

url: "http://demo.jb51.net/phpajax/ajax.php",

dataType: "json",

success: function(data) {

console.log(data);

$("#result_3").html(data.msg+':'+data.rand);

},

error: function() {

$("#result_3").html('Request Error.');

}

});

我们在另一个网站域名下的ajax.php加上这样的代码:header("Access-Control-Allow-Origin: https://www.jb51.net");

$data = array(

'rand' => $_GET['random'],

'msg' => 'Success'

);

echo json_encode($data);

上述就是小编为大家分享的PHP项目中是如何处理Ajax请求与Ajax跨域的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据制作

1.数据准备,我们需要一个train和valid文件夹,一个train.txt和val.txt(图片文件夹的位置可以任意,但是这两个txt文件的位置在data/fingervein/目录下) train和valid文件夹自然就存放着待训练的图片,train.tx…

SQLServer数据库文件组相关知识笔记

1、数据库文件组概念数据库文件被组织在称为“文件组”的逻辑组中。文件组是所创建对象(如表或索引)的目标容器,对象数据将分散在其所在目标文件组的文件中,文件组可以按你要求的方式来控制对象的物理位置。每个数据库有一个主文件…

html文件上传限制类型,html input file accept 上传文件类型限制格式 MIME 类型列表

单点登录改进版-使用ajax分发cookie避免重定向轮询前言 继上一篇博文:可跨域的单点登录(SSO)实现方案[附.net代码]虽然实现了单点登录,也存在很多不合理的地方.很多热心的朋友也给出了很多指导性的意见,特别是 LoveCoder提出的意见. 在很 ...Hello Java用记事本或者Eclipse编写…

jvm配置参数,查看大对象直接分配到老年代

看下如下代码: 配置参数 -Xms60m -Xms60m -XX:NewRatio2 -XX:SurvivorRatio8 -XX:PrintGCDetails 运行后看下如下,可以看到ParOldGen老年代,为used 20480K,也就20M,说明大对象直接分配到老年代 总结:

win10引导安卓x86_GPDwin安装安卓x86折腾记

接着之前的http://www.gcfan.cn/archives/3685说。王者荣耀下载下来问题依旧,我就在网上搜索答案。这里必须要感谢一下豆友“放不下的是筷子”,我搜索解决方案的时候发现了他的帖子,就跟帖问了他一下,结果他回复了我不少问题&…

DB Stack Overflow

Whats wrong with nullable columns in composite primary keys? 转载于:https://www.cnblogs.com/drizzlewithwind/p/5853091.html

电脑组装笔记:手把手教你如何自己组装电脑

目录 第一步:安装CPU 第二步:安装内存条 第三步:CPU风扇安装 第四步:电源安装 第五步:主板装入机箱 第六步:硬盘、固态硬盘、光驱的安装 第七步:线路连接 第八步:显示器的连接 第九步…

Amoeba for MySQL

Amoeba for MySQL Amoeba for MySQL致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当query 路由功能,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、Query过滤、读写分…

jquery 过滤html代码,jquery – 如何使指令使用过滤的HTML属性?

您可以使用ng-attr,这将是更方便的解决方案. ng-attr-data-title将评估插值{{}}&使用值创建data-title属性.而不是使用data-title “{{‘我的字符串’| myfilter}}”使用ng-attr-data-title “{{‘我的字符串’| myfilter}}”标记...更新因为你得到的价值就像{{‘我的字符串…

SQLServer数据库文件相关知识笔记

1、数据库文件概念数据库文件是SQLServer数据库的物理体现,和计算机的普通文件一样存储在计算机的磁盘空间当中。作为数据库记录和日志等其他信息的存储载体。2、数据库文件分类数据库文件主要包括主数据库文件、次要数据库文件、日志文件。主数据库文件&#xff1a…

电商总结(七)缓存系统

前段时间,在和朋友讨论和研究缓存的使用,一直对缓存的使用搞的不太清楚,所以这次把和朋友讨论过缓存系统的设计的相关问题总结总结。 对于一个电商系统,缓存是重要组成部分,提升系统性能的主要方式之一就是缓存。它可以…

操作系统:Win10自带的8个基本功能非常实用

有些朋友总是喜欢安装很多第三方软件,但是却没有意识到win10自带的基本功能,比这些第三方软件更加好用。今天小编给大家介绍一下Win10自带的八个功能,希望对大家能有所帮助! 一、保护眼睛:深色主题 办公室职场人士&…

疯狂游戏型计算机配置清单,电脑配置清单

想自己组装电脑却不知如何配置?下面是出国留学网实用资料栏目精心整理的组装电脑配置清单,欢迎参考!【组装电脑配置清单】电脑硬件,包括电脑中所有物理的零件,以此来区分它所包括或执行的数据和为硬件提供指令以完成任务的软件。 …

在Android App中集成Google登录

技术文章 来源:码农网 发布:2016-09-19 浏览:194 摘要:今天,几乎所有的web和移动app都自带谷歌和Facebook登录,这对app开发者和用户来说是一个非常有用的功能,因为几乎每个人都有一个谷歌/ Gmai…

python程序写完后点哪个运行快_让你的Python运行更快

讨厌Python的人总是说,他们不想使用它的原因之一是它很 慢。嗯,特定程序(无论使用何种编程语言)是快还是慢,在很大程度上取决于编写该程序的开发人员以及编写优化而 快速的 程序的技能和能力 。因此,让我们证明一些人是错误的&…

C语言理论作业—2

1.C语言基本数据类型及其占用的内存空间大小分别是:int:4字节,short[int]:2字节,long[int]:4字节,unsigned[int]:4字节,unsigned short[int]:2字节,unsigned long[int]:4字节,char:1字节&#x…

html 科幻模板,html5酷炫宇宙科幻周年庆典专题动画模板

资源下载此资源下载价格为4D币,请先登录资源文件列表codedown123-0727-39/img/arrow-down-1.png , 1229codedown123-0727-39/img/arrow-down-2.png , 1190codedown123-0727-39/img/arrow-down-3.png , 1132codedown123-0727-39/img/asteroids-left.png , 7015codedo…