jsonp实现问题
来源:19-5 Ajax-跨域和问题解答
学东西要快
2017-08-22
<script type="text/javascript">
function getJSONP(url){
if(url.indexOf('?')===-1){
url+='?callback=responseHandler';
}else{
url+='&callback=responseHandler';
}
var script=document.createElement('script');
script.setAttribute('src',url);
document.body.appendChild(script);
function responseHandler(json){
console.log(json);
script.parentNode.removeChild(script);
}
}
getJSONP('https://api.douban.com/v2/book/1220562');
</script>两个问题 (一)为什么我将回调函数responseHandler写成函数声明的形式浏览器就会报错,而将responseHandler写成函数表达式(函数表达式写成全局的形式,不加var)的形式能正确运行呢?
(二)为什么如果不写成全局的形式,改写成局部的形式(加var)还是会报错呢?
写回答
2回答
-
qq_修炼者_0
2018-07-18
兄弟你script标签是插在body的最下面,也就是全局环境下,生成的script标签请求后返回的jsoncallback是在全局环境下调用的,所以你在getJSONP函数里定义的responseHandler方法必须是全局方法才行,这样jsoncallback才能调用到。至于第一个问题和第二个问题解释到这里应该能懂吧
00 -
斌冰4421289
2017-08-23
Uncaught ReferenceError: responseHandler is not defined at 1220562:1 应该是你跨域访问的地方没定义这个函数,
00
相似问题