PHP ajax跨域问题最佳解决方案
一、本文通过设置Access-Control-Allow-Origin来实现跨域。
例如:客户端的域名是client.runoob.com,而请求的域名是server.runoob.com。
如果直接使用ajax访问,会有以下错误:
XMLHttpRequest cannot load http://server.runoob.com/server.php. No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin 'http://client.runoob.com' is therefore not allowed access.
1、允许单个域名访问
指定某域名(http://client.runoob.com)跨域访问,则只需在http://server.runoob.com/server.php文件头部添加如下代码:header('Access-Control-Allow-Origin:http://client.runoob.com');
2、允许多个域名访问
指定多个域名(http://client1.runoob.com、http://client2.runoob.com等)跨域访问,则只需在http://server.runoob.com/server.php文件头部添加如下代码:
$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : ''; $allow_origin = array( 'http://client1.runoob.com', 'http://client2.runoob.com' ); if(in_array($origin, $allow_origin)){ header('Access-Control-Allow-Origin:'.$origin); }
3、允许所有域名访问
允许所有域名访问则只需在http://server.runoob.com/server.php文件头部添加如下代码:header('Access-Control-Allow-Origin:*');
二、Ajax发起JSONP跨域请求
我们通过jQuery的JSONP方式可以实现跨域ajax请求,服务端php也需要做出相应的处理,也就是说php这边必须和前端页面按照一定的格式请求和返回数据。
示例:前端页面发起JSONP请求:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$.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"
还可以简单的写成:
1
2
3
4
5
|
jQuery.getJSON('http: //demo.jb51.net/phpajax/jsonp.php?callback=?",{
random: Math.random()
}, function (data){
console.log(data);
});
|
php后端服务代码可以这样写(注意输出返回的格式):
1
2
3
4
5
|
$data = array (
'rand' => $_GET [ 'random' ],
'msg' => 'Success'
);
echo $_GET [ 'callback' ]. '(' .json_encode( $data ). ')' ;
|
转载于:https://www.cnblogs.com/missphp/p/9253877.html
PHP ajax跨域问题最佳解决方案相关推荐
- 菜鸟教程 php跨域,PHP Ajax 跨域问题最佳解决方案
本文通过设置Access-Control-Allow-Origin来实现跨域. 例如:客户端的域名是client.runoob.com,而请求的域名是server.runoob.com. 如果直接使用 ...
- PHP Ajax 跨域问题最佳解决方案
本文通过设置Access-Control-Allow-Origin来实现跨域. 例如:客户端的域名是client.runoob.com,而请求的域名是server.runoob.com. 如果直接使用 ...
- ajxs跨域 php_PHP Ajax 跨域问题最佳解决方案
本文通过设置Access-Control-Allow-Origin来实现跨域. 例如:客户端的域名是edu.jb51.net,而请求的域名是edu.jb51.net. 如果直接使用ajax访问,会有以 ...
- ajax跨域原理以及解决方案
ajax跨域原理以及解决方案 参考文章: (1)ajax跨域原理以及解决方案 (2)https://www.cnblogs.com/bojuetech/p/5895767.html (3)https: ...
- JQuery的Ajax跨域请求的解决方案
JQuery的Ajax跨域请求的解决方案 参考文章: (1)JQuery的Ajax跨域请求的解决方案 (2)https://www.cnblogs.com/amylis_chen/p/4703735. ...
- AJAX跨域问题及解决方案
文章目录 跨域 哪些方式可以进行跨域 部署服务器 部署模块 ajax1 ajax2 测试 跨域解决方案 方案1:设置响应头 方案2:jsonp 深入一下jsonp 方案3:代理机制(httpclien ...
- Ajax跨域请求与解决方案
同域与跨域请求 同域请求: 网络协议, 域名,端口号都一致,则为同域(同源)请求 http://www.sina.com.cn:8090/index.html 跨域请求: 浏览器对于javascrip ...
- 利用iframe实现ajax 跨域通信的解决方案
在漫长的前端开发旅途上,无可避免的会接触到ajax,而且一般情况下都是用在同一域下的ajax请求:但是如果请求是发生在不同的域下,请求就无法执行,并且会抛出异常提示不允许跨域请求,目前我没有找到明确的 ...
- 前端筑基篇(一)-ajax跨域原理以及解决方案
由于内容较老,不是markdown编辑器,懒得更新了,参考最新地址: https://segmentfault.com/a/1190000012469713 转载于:https://www.cnblo ...
最新文章
- 英特尔10nm至强CPU发布,对标AMD“米兰”EPYC,然而结果尴尬了
- SparkProgrammingRDDs
- z-index无效注意事项
- oracle中的合并查询
- Uniform Distribution均匀分布
- Test on 2018.10.21
- 扩展欧几里得原理与模板
- android5.0+art模式,Android 5.0有哪些变化
- 按钮插件和按钮状态切换
- TCP粘包和拆包问题
- 关于腾讯云搭建Socks5多IP代理服务器实现游戏单窗口单IP完美搭建教程附带工具
- zabbix Event acknowledgment事件确认
- 安装VS2022后报错 _CRT_SECURE_NO_WARNINGS
- ubuntu安装cad快速看图linux版
- 【写作工具】用Katex打出常见矩阵
- 利用vlan交换机(网管交换机)打trunk实现单线复用
- 如何用word制作英语答题卡_考研英语答题卡模板(word打印版)
- iPad mini7:库克终于舍得堆料了?
- AndroidManifest.xml--android系统权限定义
- Eclipse快快捷键
热门文章
- python特殊函数__str__、__repr__和__len__
- 使用Amalgamate将C/C++项目合并成一个.h/.c[pp]文件
- CIFAR-10 dataset 的下载与使用
- 转document.documentElement和document.body的区别
- iOS modal view的关闭和显示问题
- 程序员需要了解的一点组织行为学知识
- 火狐 和 IE 透明度的设置。
- 有感软件安装称呼的变化
- python中continue用法案例_Python continue语句实例用法
- matlab gradient