老师关于跨域url处理有个问题
//封装JSONP
function getJSONP(url, callback) {
if (!url) {
return;
}
//声明数组用来随机生成函数名
var arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'i', 'j'],
r1 = Math.floor(Math.random() * 10),
r2 = Math.floor(Math.random() * 10),
r3 = Math.floor(Math.random() * 10),
name = 'getJSONP' + arr[r1] + arr[r2] + arr[r3],
cbname = 'getJSONP.' + name;
//判断url地址中是否含有?号
if (url.indexOf('?') === -1) {
url += '?jso=' + cbname;
} else {
url += '&jso=' + cbname;
}
console.log(url);
//动态创建script标签
var script = document.createElement('script');
//定义被脚本执行的回调函数
getJSONP[name] = function(data) {
try {
callback && callback(data);
} catch (e) {
} finally {
//最后删除该函数及script标签
delete getJSONP[name];
script.parentNode.removeChild(script);
}
}
//定义script的src
script.src = url;
document.getElementsByTagName('head')[0].appendChild(script);
}
getJSONP('https://class.imooc.com/api/jsonp', function(data) {
console.log(data);
});在判断url地址中是否含有问号的时候,老师视频里说,?号后面的参数可以自己取名字,我就把?jsonp改成了?jso,就不能用了,很疑惑,我自己想了一下,是不是?jsonp这个参数需要和服务端约定好才行呢?因为我这里没有服务端,我用的是wampserver,后端没有返回,所以失败的呢
8
收起
正在回答
2回答
你好,非常抱歉之前回复的有些问题,
1、图片能够展示出来,不是因为跨域的问题,是使用了ajax获取的是json文件中本地的数据,所以和改变jsonp的名字是没有关系的。
2、jsonp名字实际上是可以改变的,但是视频中提供的数据接口:
‘http://class.imooc.com/api/jsonp’
在后台中是设置死的,?后面只能写jsonp,不能是其他的名字。
组件化思想开发电商网页 18版
- 参与学习 人
- 提交作业 467 份
- 解答问题 4826 个
本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。
了解课程


恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星