jsonp的理解与疑惑
来源:3-5 跨域调用
WittChen
2020-05-13 14:29:20

老师您好,我的问题较多请耐心解答。
1回答
同学你好,问题解答如下:
1. jsonp的原理是利用script标签的如下特性来请求数据的:
先在页面上定义一个函数;然后在页面上利用script标签,请求一个地址,如果该地址返回来的内容是对函数的调用,那么页面上的该函数就会被执行,如下:

该地址返回的是callback的调用:

然后我们会发现页面上,提前定义的那个callback被执行了,并且获取到了数据:

其中script的src地址中,问号(?)后面的jsonp=callback中jsonp是和后端约定好的:

函数名称(即我们例子中的callback)前端自定义,发送给后端,后端就返回该函数的调用,里面包含数据。
利用script标签的这个特性(原理),就有了jsonp;
2. 在getJSONP方法中,我们在url地址后面拼接了回调函数的名称,比如:getJSONP.abc

代码中的name是随机生成的,url中拼接的jsonp是和后端约定好的 。getJSONP.abc(对象.属性) 这样写是把函数abc挂载到getJSONP上(其中一种方式),也可以使用上面老师举例中的方式。
也就是说,我们给getJSONP方法添加了一个属性abc,该属性abc的值是一个函数:

然后动态创建一个script标签,去请求这个url地址;这个地址返回getJSONP.abc的调用,并传回参数。由于我们已经定义了getJSONP.abc这个函数,利用script标签的特性,就可以自动执行该函数内的代码,并且接收到传回的参数:

其中try中的callback是我们调用getJSONP时,传入的参数:

如果我的回答帮到了你,欢迎采纳,祝学习愉快!
相似问题