博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何实现跨域!
阅读量:4306 次
发布时间:2019-06-06

本文共 1598 字,大约阅读时间需要 5 分钟。

前言:

这里说的js跨域是指通过js在不同的域(服务器)之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同,都被当作是不同的域。

要解决跨域的问题,我们可以使用以下几种方法:

一、通过原生js实现jsonp跨域:

实现原理:

1、后台不是直接返回数据,而是返回一个函数,同时这个函数传入要返回的数据。

2、前端利用script的src形式(<script src="http://xxx/tp5/public?callback=dosomething"></script>)请求接口并传入callback=dosomething(可以自定义)。(替代ajax的做法)

代码如下:
后台:
public function index()    {        $callback = $_GET['callback'];           $data = array(            'a'=>123,            'b'=>456        );        return $callback.'('.json_encode($data).')';    }

前端:

特别注意下面的先后顺序,必须先定义dosomething,然后通过src的形式来进行调用接口。

 

二、通过Jquery来实现jsonp跨域!(项目中推荐使用这个!!!)

实现原理同上!但是更简单!后台代码不变,还是返回一个函数,函数里面传入要返回的数据!

前端代码如下:

和一般的ajax请求一样,就是多了一句  dataType:"jsonp"!

小结:

1、首先弄明白跨域原理,其次项目中推荐使用Jquery来进行跨域!

2、前端的话,加一句即可dataType:"jsonp"; 

3、后台需要改变三处    (1)$callback = $_GET['callback'];  (2) return $callback.'('.json_encode($data).')' (3)把post请求改为get请求!;

 -------------------------------------------------------------------------------------------------------------------------------------------------------补充-------------------------------------------------------------------------------------------------------------------

php返回数据,可以调用以下函数来实现灵活切换为返回格式。

function api_jsonp_encode($json)    {        if (!empty($_GET['callbak'])) {            return $_GET['callbak'] . '(' . $json . ')'; // jsonp        }        return $json; // json    }

 

特别注意:如果采用jsonp跨域请求,则请求方式默认就是get ,因此后台的代码也得改为get式的获取数据!

 

 

后台解决跨域:

php中:

 

header('Access-Control-Allow-Origin: *');
注意:这个在php非框架中可以用,但是在tp5等框架中有问题,需要用行为或者中间件来操作!

 

转载于:https://www.cnblogs.com/teamemory/p/9828895.html

你可能感兴趣的文章
CocoaPods安装和使用教程
查看>>
Beginning Auto Layout Tutorial
查看>>
block使用小结、在arc中使用block、如何防止循环引用
查看>>
iPhone开发学习笔记002——Xib设计UITableViewCell然后动态加载
查看>>
iOS开发中遇到的问题整理 (一)
查看>>
Swift code into Object-C 出现 ***-swift have not found this file 的问题
查看>>
为什么你的App介绍写得像一坨翔?
查看>>
RTImageAssets插件--@3x可自动生成@2x图片
查看>>
iOS开发的一些奇巧淫技
查看>>
常浏览的博客和网站
查看>>
Xcode 工程文件打开不出来, cannot be opened because the project file cannot be parsed.
查看>>
iOS在Xcode6中怎么创建OC category文件
查看>>
5、JavaWeb学习之基础篇—标签(自定义&JSTL)
查看>>
8、JavaWEB学习之基础篇—文件上传&下载
查看>>
reRender属性的使用
查看>>
href="javascript:void(0)"
查看>>
h:panelGrid、h:panelGroup标签学习
查看>>
f:facet标签 的用法
查看>>
<h:panelgroup>相当于span元素
查看>>
java中append()的方法
查看>>