jsonp跨域

2017-12-13  本文已影响0人  小旭同志

作者:寸志

链接:https://www.zhihu.com/question/28890257/answer/269738446

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这是我面试的常问问题之一。顺序如下:

1.知道 jsonp 么?基础知识

:知道,可以实现跨域请求;

答不知道:换别的话题。

2.为什么 ajax 不可以,但是 jsonp 可以实现跨域请求呢?抠技术细节

:因为 jsonp 是通过插入一个 script 标签,利用 script 可以跨域请求来实现的。换问题3;

:面试官傻逼,ajax 现在也可以使用 cors 来做跨域请求;换问题 2.5。

答不知道:换问题 2.5。

2.5jsonp 实现原理?抠技术细节

答:通过创建一个 script 标签,将 src 设置为目标请求,插入到 dom 中,服务器接受该请求并返回数据,数据通常被包裹在回调钩子中;

回答不知道:我自己解释 jsonp 的实现。

3.可以用 jsonp 发送 post 请求么?融汇贯通

:显然不行,看过支持 post 请求的 script 么?

答不知道:反问,看过支持 post 请求的 script 么?

4.参考 jsonp,还有那些发送跨域请求的途径?学习能力和潜力

:img link iframe 等元素都可以发送跨域请求呀!

答不知道:反问img link iframe 等元素是不是也可以?

5.img link iframe script 来发送跨域请求有什么优缺点?要不你面我吧

……

其实吧,jsonp 名字听上去挺高大上,实际啊就是个矮穷矬。

下附代码:


jsonp

类型: String

在一个jsonp请求中重写回调函数的名字。这个值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,比如{jsonp:'onJsonPLoad'}会导致将"onJsonPLoad=?"传给服务器。在jQuery 1.5,,设置jsonp选项为false,阻止了jQuery从加入"?callback"字符串的URL或试图使用"=?"转换。在这种情况下,你也应该明确设置jsonpCallback设置。例如, { jsonp: false, jsonpCallback: "callbackName" };

jsonpCallback

类型: String, Function

为jsonp请求指定一个回调函数名。这个值将用来取代jQuery自动生成的随机函数名。这主要用来让jQuery生成一个独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存GET请求的时候,指定这个回调函数名。从jQuery 1.5开始,你也可以使用一个函数作为该参数设置,在这种情况下,该函数的返回值就是jsonpCallback的结果。

上一篇下一篇

猜你喜欢

热点阅读