0.jasonp 和 cors 两种解决跨域问题的方法(后者比较常用)
1.返回数据为jason格式的时候,跨域的问题:(使用jquery的方法,也是同理的)
<script> var script=document.createElement('script'); script.type='text/javascript'; script.src='http://api.avatardata.cn/SimpleArea/LookUp?key=0ed70ab5cb6d42a2af2426c16eaf34a4&parentId=efa40202-d8a6-494e-88e6-44123bb8ccf6&callback=onBack'; document.head.appendChild(script); function onBack(res) { console.log(res); } </script>问题:
报错:Uncaught
SyntaxError: Unexpected token :
解决:(交给后台了,让他改一下数据的格式就好)
如果是 JSONP 的话,你 请求 返回的应该是一个回调函数,而不是一个 JS 对象 是服务器的返回值出错了,应该返回的是一个回调函数 强调: 是服务器端的数据返回值有问题(废了好半天的功夫) 问题解决: 在使用jQuery的时候,&callback=onBack是不需要你自己写的,jQUery已经封装好了2.当接口的数据没有问题的时候:(又出现了问题) 这次使用的是jQuery
$.ajax({ url: 'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su', type: 'get',//注意,jsonp的方式,只可以使用get提交 dataType: 'jsonp', data: {wd: 'h'}, //在这里传参数 /* success: function (data) { console.log('success函数执行成功了') }, error: function (err) { console.log('error请求错误') }*/ }) .done(function (data) { console.log('done执行了') }) .fail(function (data) { console.log('fail执行了') }); /* * 直到上面的步骤,是不可以的, * 之前说过,使用jasonp的方式,返回的数据需要是回调函数的方式 * 分析返回的数据结构: * window.baidu.sug() ; * 他返回的确实是一个回调函数,但是这个回调函数我们没有, * 没有,就自己创建一个呗(其实,本地链百度对象都是没有的) * * 关于 * * */ var baidu = new Object(); baidu.sug = function (data) { console.log(data) }问题:
出现在执行顺序上面:
baidu.sug()方法--->fail()方法 (他为什么,就直接走到失败了呢)
解决:
就直接在sug()里面,写执行语句得了
还有:
success/error done/file 只不过是新旧版本的两种写法(感觉差不多)
3.参考:
http://www.cnblogs.com/woider/p/5805248.html