JS 跨域问题和解决方案
2017-05-18 16:08
232 查看
跨域问题是浏览器同源策略限制,当前域名的js只能请求相同域名下url。解决方式通常有两种:1.使用jsonp,要求在后端返回的是jsonp格式的数据js代码:
$("button").click(function(){ $.ajax({ url:"http://xxx:8000/api/getInfo", dataType:"jsonp", success:function(result){ $("p").html(result.msg); },error:function(){ console.log('fail'); } }); });
后端代码:
if(isset($_REQUEST ['callback'])&&!empty($_REQUEST['callback'])){ $jsoncallback = htmlspecialchars($_REQUEST ['callback']); } echo $jsoncallback . '(' . $json_data . ')'; die();后端的代码先判断是否有callback,有的话则需要返回的jsonp格式数据本质是往head里面append了一个script标签,相当于是请求了一个文件,服务端返回对应格式的文件,利用的是<script>标签的src,缺点在于它只支持GET请求而不支持POST等其它类型的HTTP请求;它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题
2.第二种方式在后端header设置Access-Control-Allow-Origin:*
JS代码
$("button").click(function(){ $.ajax({ url:"http://xxx:8000/api/getInfo", dataType:"json", type:'post', data:'id=123', success:function(result){ $("p").html(result.msg); },error:function(){ console.log('fail'); } }); });后端代码:
header('Access-Control-Allow-Origin:*'); echo $json_data; die();采用着这种方式优点在于支持post方式,缺点在于相当于api对外开放了,所以要加上要传递一些参数,
{ 'name': 用户名, 'key': 加密的验证key, 'timestamp': 时间戳, }
在测试的时候,采用jsonp的方式,在后端代码设断点,发起请求之后进入到了断点。
而采用设置Access-Control-Allow-Origin:*的时候,怎么也进不到断点里,不过最终后端都有返回数据。
相关文章推荐
- js跨域问题解释 解决方案值使用jsonp或jQuery
- js跨域问题 常见的集中解决方案
- js 跨域问题以及解决方案
- js跨域问题及解决方案
- js跨域问题的三种解决方案
- NODE.JS跨域问题的完美解决方案
- JS的跨域问题
- 关于JS跨域刷新父页面的问题
- ajax跨域和js跨域解决方案
- Js 跨域调用问题
- js跨域问题之跨域iframe自适应大小实现代码
- js中的null值------一个问题的解决方案。
- P3P 跨域访问第三方cookie的解决方案 适合解决UC的同步登录问题
- 动态加载JS文件,完美解决跨域、编码、嵌套、队列、兼容性、执行顺序等相关问题。
- 关于引用js文件中出现乱码问题的解决方案
- 解决iframe跨域读写Cookies的问题,(ASP、ASP.NET、PHP、JSP)解决方案
- ajax跨域和js跨域解决方案
- ajax跨域和js跨域解决方案
- ajax跨域和js跨域解决方案(http://hi.baidu.com/longniao/blog/item/ce5e9cca3e2a4782c817684d.html)
- js 跨域和ajax 跨域问题小结