您的位置:首页 > 编程语言 > PHP开发

web开发跨域问题个人总结(PHP与js交互)

2015-12-27 22:21 656 查看
之所以想总结一下,这个我最近接手的一个新项目有关:我们公司中的另一个站点需要跨站点请求我这边一个‘评论’组件的功能。本来如果走的是接口调用也没这么多问题,可是公司考虑到评论组件公司里的其他五个站点都要用到,所以在js层面想实现一个插件的功能,所有接口请求都由js来实现。废话不多说。

1.什么叫做跨域?

这里我根据我看到的相关资料说一下我的理解,如有错误欢迎指正:最常见的跨域就是一个URL请求另一站点的URL,例如:www.baidu.com向腾讯请求一个第三方接口。还有另外一种跨域:同一站点下的不同端口之间的请求也称之为跨域。


2.解决办法一


在调用的接口的构造函数中第一行添加header('Access-Control-Allow-Origin:
*');即可解决,其中‘*’代表所有的站点都被允许请求。这种办法对IE9以及以下版本的浏览器“无感”。

3.解决办法二
利用jsonp(JQuery提供的一种方式),只需在PHP代码中将即将要返回的数组与jsonp标记连接成字符串即可,例如
if($result){
$callback.'('.json_encode($result).')'//这里的callback是与前端js约定好的一个名称
}
这里只列举了PHP部分针对Jsonp处理的方法,具体js怎样实现可参考:http://www.cnblogs.com/xcxc/p/3729660.html
补充说明:JSONP方式跨域提交数据的方式为get,即使你将提交的json数组type改为post,后台依旧是用get方式传输,这个官方文档中有说明。用get方式传递的时候,数据大小就有了限制。所以如果是传递附件之类的大文件,跨域提交使用的是flash的uploadify以post方式上传(可参考http://wangyaobeijing.blog.163.com/blog/static/1583303201101391530509/)。
$.ajax({
type : "post",
url : "ajax.php",
dataType : "jsonp",
jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
success : function(json){
alert('success');
},
error:function(){
alert('fail');
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  跨域 PHP flash uploadify