一、本文通过设置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跨域问题最佳解决方案相关推荐

  1. 菜鸟教程 php跨域,PHP Ajax 跨域问题最佳解决方案

    本文通过设置Access-Control-Allow-Origin来实现跨域. 例如:客户端的域名是client.runoob.com,而请求的域名是server.runoob.com. 如果直接使用 ...

  2. PHP Ajax 跨域问题最佳解决方案

    本文通过设置Access-Control-Allow-Origin来实现跨域. 例如:客户端的域名是client.runoob.com,而请求的域名是server.runoob.com. 如果直接使用 ...

  3. ajxs跨域 php_PHP Ajax 跨域问题最佳解决方案

    本文通过设置Access-Control-Allow-Origin来实现跨域. 例如:客户端的域名是edu.jb51.net,而请求的域名是edu.jb51.net. 如果直接使用ajax访问,会有以 ...

  4. ajax跨域原理以及解决方案

    ajax跨域原理以及解决方案 参考文章: (1)ajax跨域原理以及解决方案 (2)https://www.cnblogs.com/bojuetech/p/5895767.html (3)https: ...

  5. JQuery的Ajax跨域请求的解决方案

    JQuery的Ajax跨域请求的解决方案 参考文章: (1)JQuery的Ajax跨域请求的解决方案 (2)https://www.cnblogs.com/amylis_chen/p/4703735. ...

  6. AJAX跨域问题及解决方案

    文章目录 跨域 哪些方式可以进行跨域 部署服务器 部署模块 ajax1 ajax2 测试 跨域解决方案 方案1:设置响应头 方案2:jsonp 深入一下jsonp 方案3:代理机制(httpclien ...

  7. Ajax跨域请求与解决方案

    同域与跨域请求 同域请求: 网络协议, 域名,端口号都一致,则为同域(同源)请求 http://www.sina.com.cn:8090/index.html 跨域请求: 浏览器对于javascrip ...

  8. 利用iframe实现ajax 跨域通信的解决方案

    在漫长的前端开发旅途上,无可避免的会接触到ajax,而且一般情况下都是用在同一域下的ajax请求:但是如果请求是发生在不同的域下,请求就无法执行,并且会抛出异常提示不允许跨域请求,目前我没有找到明确的 ...

  9. 前端筑基篇(一)-ajax跨域原理以及解决方案

    由于内容较老,不是markdown编辑器,懒得更新了,参考最新地址: https://segmentfault.com/a/1190000012469713 转载于:https://www.cnblo ...

最新文章

  1. 英特尔10nm至强CPU发布,对标AMD“米兰”EPYC,然而结果尴尬了
  2. SparkProgrammingRDDs
  3. z-index无效注意事项
  4. oracle中的合并查询
  5. Uniform Distribution均匀分布
  6. Test on 2018.10.21
  7. 扩展欧几里得原理与模板
  8. android5.0+art模式,Android 5.0有哪些变化
  9. 按钮插件和按钮状态切换
  10. TCP粘包和拆包问题
  11. 关于腾讯云搭建Socks5多IP代理服务器实现游戏单窗口单IP完美搭建教程附带工具
  12. zabbix Event acknowledgment事件确认
  13. 安装VS2022后报错 _CRT_SECURE_NO_WARNINGS
  14. ubuntu安装cad快速看图linux版
  15. 【写作工具】用Katex打出常见矩阵
  16. 利用vlan交换机(网管交换机)打trunk实现单线复用
  17. 如何用word制作英语答题卡_考研英语答题卡模板(word打印版)
  18. iPad mini7:库克终于舍得堆料了?
  19. AndroidManifest.xml--android系统权限定义
  20. Eclipse快快捷键

热门文章

  1. python特殊函数__str__、__repr__和__len__
  2. 使用Amalgamate将C/C++项目合并成一个.h/.c[pp]文件
  3. CIFAR-10 dataset 的下载与使用
  4. 转document.documentElement和document.body的区别
  5. iOS modal view的关闭和显示问题
  6. 程序员需要了解的一点组织行为学知识
  7. 火狐 和 IE 透明度的设置。
  8. 有感软件安装称呼的变化
  9. python中continue用法案例_Python continue语句实例用法
  10. matlab gradient