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

互联网- 2023-08-20 14:27:28

jquey jsonp 跨域请求数据

大家好,今天给各位分享既然JSONP同样可以请求到数据,还可以跨域,为什么还要用axios的一些知识,其中也会对为什么不建议链式调用进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

本文目录

  1. 小米新手机耗电快是什么原因
  2. 既然JSONP同样可以请求到数据,还可以跨域,为什么还要用axios
  3. JAVA8新特性是什么
  4. 应用行为记录怎么关闭

小米新手机耗电快是什么原因

小米新手机耗电快的原因可能有几个方面。

首先,新手机通常会装备先进的处理器和高分辨率的屏幕,这意味着更多的计算和视觉资源消耗,从而使电池更快地耗尽。

其次,新手机可能会预装很多应用程序,其中一些可能在后台运行并不断消耗电量。此外,网络连接的稳定性也会影响电池寿命,因为手机需要不断搜索信号并保持通信连接。

最后,用户个人使用习惯也会影响手机电池寿命,如屏幕亮度高、持续使用高耗电应用等都可能导致电池更快耗尽。因此,使用新手机时,适当优化设置、关闭后台应用和调整使用习惯都有助于减少电池的耗电速度。

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

一个场景

你做为项目前端的负责人,需要定下前端的数据请求规范与框架,你早就对axios很不满了,于是决定拉起袖子,直接用JSONP上。

于是在团队里面,你直接喊,大家,后面我们请求数据统一使用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,可制作性太低了。

总结下JSONP请求能力单一JSONP在现在前端开发中影响编码规范现在跨域处理很方便,处理都是微服务例外

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

JAVA8新特性是什么

一.接口内允许添加默认实现的方法

在原来的定义中接口中只能有方法声明,不能有方法体。在Java8中,接口也可以有自己带有实现的方法啦。具体来说是要用default来修饰的方法,其可以像类中的方法一样有执行语句。在实现接口时,可以不实现其default方法,并且实现类对象可以调用其接口的default方法。当然也可以在实现类中覆盖default方法。

二.Lambda表达式

Lambda简化了匿名内部类的写法。Java8中可以通过类型推断来判断出用户的意图,不必将类型等信息写全。特别是方法实现体中只有一句语句的实现类,更能加大简化力度。

Lambda解决了将一个方法作为参数传值的问题。解决了一个函数是否可以独立存在的问题。是Java向函数式编程的一种靠拢。

一般在某个方法只使用一次的地方使用Lambda表达式;如果方法没有入参,则只写一个()->{语句};当只有一个参数,且类型可推断时,()可省略;如果方法体中只有一条语句花括号可以省略;

三.函数式接口FunctionalInterface

学习了上述Lambda的内容肯定会有一些疑问:如果接口有多个需要实现的方法呢,还能使用Lambda?如果可以的话Lambda是如何做推断的。

答案是,使用Lambda时要求接口中只能有一个抽象方法(通过default修饰的带有方法体的接口中的方法不是抽象方法)。

如果一个接口被注解@FunctionalInterface修饰,则该接口只能有一个抽象方法,否则会报错。

四.引用类的构造器及方法

在Lambda中若是直接调用了一个方法,且调用方法的形参和要实现的接口抽象方法形参一致,则可以进一步简写。举例如下:接口定义:

Lambda表达式

引用其他类型的方法

例子中的方法是Integer类的静态方法,如果是某个类的实例方法,则应该使用一个对象加::来引用。如,obj::func;如果要调用的一个构造方法(抽象方法返回的是一个对象),则应该这样使用:Integer::new。用new代替构造方法名字。五.Lambda访问外部变量及接口默认方法

访问局部变量

可以访问局部的final变量,但不能修改。与匿名内部类不同的是,外部变量不需要显示地声明为final,但却要有final的特点,不能被修改,在Lambda之后被修改也不行。

访问成员变量和静态变量可以任意读写,举例如下:

访问接口的默认方法在匿名类中可以访问接口定义的默认方法,在Lambda中不可以访问。

六.内置函数式接口

Java8中内置了许多函数式接口,包括Comparator和Runnable等,它们被添加了@FunctionalInterface注解,以用来支持Lambda表达式。

6.1Predicate断言

查看源码,这个函数式接口中要实现的方法为:booleantest(Tt);即一个判断传入值真假的方法,当然判断的规则由你自己定义。如定义一个判断字符串长度是否大于10的Predicate:

6.2Function

查其源码,需要实现一个Rapply(Tt)的方法。这个接口提供链式调用、组合的功能。

6.3Supplier

Supplier<Person>personSupplier=Person::new;personSupplier.get();

6.4Consumer

??Consumer<Person>greeter=(p)->System.out.println("Hello,"+p.firstName);greeter.accept(newPerson("Luke","Skywalker"));

6.5Optional

参考资料

七.Stream流

什么是Stream流?参考资料Stream流提供了一种对集合Collection的方便的操作。分为“中间操作”和“终端操作”两种。中间操作的结果还是返回一个Stream,可以继续操作;而终端操作会返回一个结构不能继续流操作了。

要使用Sream首先要通过Collection的Stream方法获取一个Stream对象。

7.1Filter过滤中间操作

筛选出集合中满足一定条件的元素。Stream有一个filter方法,入参是一个Predicate,筛选结果是Predicate.test为true的集合的Stream。下面来看一个筛选出String集合中以"s"开头的String的程序:

7.2Sorted排序中间操作

可以给sorted()方法传入一个Comparator用来自定义排序,否则将使用默认排序规则。

7.3Map

map方法入参为一个Function函数式接口。调用map方法将对集合中的每一个元素执行一下Function中的apply方法,并返回由其返回值组成的集合的流。

举例:将表示数字的字符串集合全部转换为数字再加一后输出。

7.4Match匹配

是种终端操作,结果不是stream对象,而是boolean值根据Predicate指定的规则判断集合中是否有匹配的,有的话返回true。有三种形式,anyMatch:有一个匹配就返回true。allMatch:全部匹配返回true。noneMatch:全部不匹配返回true。

7.5Count计数

终端操作,统计stream中元素的个数。

7.6Reduce

list[0]和list[1]执行操作,得到的结果为result。result再和list[2]执行操作,得到的结果result。依次进行,对所有元素执行一遍。

根据上述描述也可以看出,这里的“操作”必须满足两个入参、返回值是同一类型的。

reduce方法的入参是:BinaryOperator<T>这里的T就是集合的元素类型。

举例:求Integer集合中所有元素的和。

注意:reduce的返回值为Optional<T>。

作者:第四单元链接:https://www.jianshu.com/p/4df02599aeb2来源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

应用行为记录怎么关闭

关闭方法为:

打开【设置】-【应用设置】-【应用管理】,接着切换到【权限】,点击【应用权限】-【权限管理】,在这里可以看到一些和隐私相关的内容,如定位、手机信息、应用列表等等。点开这些选项,找到上面从敏感行为获取到的APP,将其权限关闭禁用即可。

关于既然JSONP同样可以请求到数据,还可以跨域,为什么还要用axios到此分享完毕,希望能帮助到您。

jquey jsonp 跨域请求数据
  • 声明:本文内容来自互联网不代表本站观点,转载请注明出处:bk.66688815.com/12/94925.html
上一篇:无锡话“白露身弗露,赤膊变猪猡”是什么意思
下一篇:无锡人如果阴性可以外出省吗
相关文章
返回顶部小火箭