关于前端跨域jsonp的理解

我们常说前端解决跨域有:

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
喜欢就支持一下吧
点赞0 分享