js跨域请求的个人见解

来源:互联网 发布:网络五大鬼畜舞曲 编辑:程序博客网 时间:2024/05/15 02:36

这是我的第一篇文章,也是我最近做项目的一个总结吧。

今天我们来说说跨域,我只要说两种解决方案,第一种是生成script标签,另一种是ajax封装的跨域方法。其实这两个都是jsonp的形式(好吧,,,,其实就是一种。:-D)

我就以这个获取百度数据讲一讲。


第一种:附上代码

<script type="text/javascript">
function cbFun(data){
console.log(data);
}
</script>
<script src="https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?cb=cbFun&json=1&wd=百度" type="text/javascript"></script>

注意红色部分!如果你按正常的ajax请求是的不到数据的,路径中cb=cbFun其实就是重点,cbFun就是我自定义的一个回调函数,如果能拿到数据,就打印出来。至于我为什么这样起名字,我就是为了打破传统,以为让你以为一定要callback=cbFun,,嘿嘿,我偏不这么写,有人要问了,,,,cb后台能认识吗?

那就附上后台代码:以php为例。一般都是$_GET('callback');只要改成$_GET('cb');不就得了,但是一旦涉及到前后端交互的一定是前后端商量这来的对吧。参数怎么传,一个人定不了,应该一起交流不是吗?不然谁都完成不了!

<!--后台文件-->
<?php
$callback=$_GET('callback');
$data=array('a','b','c');
echo $callback.'('.json_encode($data).')'
?>

第二个script标签可以动态的生成,怎么生成?百度去呗。。。。穿的数据少可以用这种链接的方式上传。多了咋搞?进入第二种


第二种:附上代码,其实就是ajax的jq封装罢了

<script src="jquery.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
function cbFun(data){
console.log(data);
}
$.ajax({
type:"get",
url:"https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su",//"http://www.a.com/data.php"
async:true,
data:{
'json':1,
'cb':'cbFun',//自定义的回调函数
'wd':'百度' //这三个value值就是连接在url上的参数,jq会帮我们封装。
},
dataType: 'jsonp',
/*jsonp: "cb",
jsonpCallback: "cbFun",*///jsonp,jsonpCallback这两个代码的作用就是把成功返回的数据放到sucess方法里,
//如果不写,sucess里的data将打印不出来(其实就是sucess现在可以不写了,数据直接拿回到了外面定义的回调函数里),然而cbFun可以打印出来哦
success:function(data){
console.log(data)
}
});

</script>

我们需要穿的参数就在data里面,其实就是一个js对象。废话不说了,你自己复制黏贴敲一遍,结果立刻见效,我撤了,还有工作要做。欢迎广大的网友喷我并且批评指正!


2 0
原创粉丝点击