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才能调用到。至于第一个问题和第二个问题解释到这里应该能懂吧

0
0

斌冰4421289

2017-08-23

 Uncaught ReferenceError: responseHandler is not defined at 1220562:1 应该是你跨域访问的地方没定义这个函数,


0
0

BAT大牛带你横扫初级前端JavaScript面试(第二版)

BAT高级前端工程师亲授,结合真实面试题,提高面试成功几率

4268 学习 · 817 问题

查看课程