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

之所以想总结一下,这个我最近接手的一个新项目有关:我们公司中的另一个站点需要跨站点请求我这边一个‘评论’组件的功能。本来如果走的是接口调用也没这么多问题,可是公司考虑到评论组件公司里的其他五个站点都要用到,所以在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');
    }
});


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值