我们常说前端解决跨域有:
1.服务端设置 Access-Control-Allow-Origin:*
2.代理
3.jsonp
复制代码
那么今天我们就来说说jsonp关于跨域请求的解决办法(只说思路没代码)
开始之前我先抛出几个问题
1. 前端可以发送请求标签都有什么?
2. 这些标签发送请求是否跨域?
3. 这些标签返回的数据都是什么?
复制代码
开始回前面抛出的问题
1. link标签请求css的、img标签请求图片的、script标签请求js的、iframe请求页面的等等。
2. 以我现在碰见的都没有发现跨域的现象
3. link返回的是css样式;img返回的图片;script返回的javascript的代码,可以执行的那种,
比如你引入jquery就可以使用$;iframe直接返回一个页面
复制代码
如果你仔细点你就会在上面回答问题3中发现有个标签我做出了强调说明那就是script,
请注意’‘script返回的javascript的代码,可以执行的那种’‘
所以jsonp就是利用 ‘script返回的javascript的代码,可以执行的那种’ 特性做出了跨域请求
1.比如我们请求 http://www.xxxx.com (就是 <script src=http://www.xxxx.com></script> )
他会为我们返回一段javascript的一段代码,他会执行
2.比如会返回我们一个对象 如:var obj = {name:二蛋,age:18} 你说我们在script下面输入obj
可以打印出 {name:二蛋,age:18} 答案是肯定,如果都这样返回太污染全局变量了吧
3. 如果返回的是一个函数的执行会怎么样,我们想要的数据就是这个函数的参数会怎么样
4. 比如返回了一个函数为 cd({name:xxx,age:18}) 他会报错因为cd这个函数根本就没有定义
5. 如果我们提前定义会怎么样,不会报错我们也可以拿到数据了,两全其美,如果每次都这样
这不还全局污染了,而且返回函数的名字你可能也不知道这该怎么办那?
6. 这说明我们还需要后端的配合了 ,然后让他返回什么函数名字那?前端代码又不是后端写的,所以
返回的名字应该有我们前端定义; 比如我们这样来 <script src=http://www.xxxx.
com?callback=cd></script> callback等于的值就是返回的函数名字,这样我们前端就可以控制名字了;
这不jsonp跨域请求不就完成了,然后你想干嘛就干嘛
复制代码
最后一个问题 jsonp是get请求还是post的请求?
答案是: get请求。因为script 的src 只能是get的请求
复制代码
总结
jsonp需要后端配合 不然也做不成
请参考 jquery的jsonp请求
复制代码
任务
找你的小伙伴让他配合你看看你能不能写出jsonp的简单请求
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END