首页 >

既然JSONP同样可以请求到数据,还可以跨域,为什么还要用axios? – 网络|

笔记本怎么查询MCA,长阴影怎么做,asp.net有什么用既然JSONP同样可以请求到数据,还可以跨域,为什么还要用axios? - 网络|既然JSONP同样可以请求到数据,还可以跨域,为什么还要用axios

于是在团队里面,你直接喊,大家,后面大家请求数据统一使用JSONP,谁用axios谁明天就不用来了。

然后,你和服务端的人员开了一个会,让他们定下接口文档,一天后,你收到一份接口文档,里面写好了请求协议,除了GET还有POST,还有PUT和DELETE。

你用了一个GET接口,请求完,发现很完美,服务端不用设置Access-Control-Allow,你突然觉得自己这个决定很完美,果然最初的决定是正确的,于是你就让各个开发开始对接服务端接口。

问题来了

不一会儿,一位前端开发和你说,不行呀,JSONP只能进行Get请求,其它什么POST都不支持呀,顿时你懵逼了……

上面是个虚拟场景,里面讲了JSONP的一个问题,就是只能使用GET请求获取数据。大家来细说下什么是JSONP。

JSONP原理

ajax的核心是通过XmlHttpRequest获取链接的内容,它是可以支持任何请求方式的。但有个问题就是,如果服务端不支持,它是不可能取到跨域请求的信息的。而JSONP呢?

大家在写网页代码时,发现标签的src属性是可以加载其它跨的信息的,比如Script、Img、iFrame的标签,于是大家灵机一动,那是不是也可以来加载服务端接口呀。

然后你试了下,哇靠,果然可以,只要输出格式处理好,你甚至可以使用它来请求数据并进行处理。

先天问题

但是由于先天性的问题,JSONP只适合用来获取数据,它没法做其它请求处理。

那你可能会说,那偶就获取使用JSONP可以了吧,其它使用AJAX。大家先不说,统一编码对维护性的成本降低的重要性,你还分两套实现方案,你如果实在要处理,大家试下看看效果如果。

假如一切正常,你用JSONP请求数据,数据返回正常,你显示,很完美。

假如出了一点点问题,你用JSONP请求数据,数据没返回,或是一些奇怪的错误,对,没有错误码,你都不知道是网络问题,还是代码问题,还是鉴权问题。对了,说到鉴权,JSONP你都没法自定义Header,可制作性太低了。

总结下

  1. JSONP请求能力单一
  2. JSONP在现在前端开发中影响编码规范
  3. 现在跨域处理很方便,处理都是微服务

例外

如果你实在需要一个外部接口,这个接口不是你开发的,且是不支持跨域的,那JSONP是最好的处理方式。


既然JSONP同样可以请求到数据,还可以跨域,为什么还要用axios? - 网络|
  • css3 右三角 |47个css3动画
  • css3 右三角 |47个css3动画 | css3 右三角 |47个css3动画 ...

    既然JSONP同样可以请求到数据,还可以跨域,为什么还要用axios? - 网络|
  • css 进度条重置 |css3 动画属性
  • css 进度条重置 |css3 动画属性 | css 进度条重置 |css3 动画属性 ...

    既然JSONP同样可以请求到数据,还可以跨域,为什么还要用axios? - 网络|
  • css 换行文字垂直居中 |css怎么定默认字体
  • css 换行文字垂直居中 |css怎么定默认字体 | css 换行文字垂直居中 |css怎么定默认字体 ...