2017年了,提jsonp似乎有些过时。哈哈,作为系列文章里面的抛砖篇,这里做个开头也不错。大概是04年,苏南大叔从hlgnet.com的刘强那边,听说了ajax这个词。就觉得ajax这个东东实在是非常的神奇。可以不刷新页面,就替换页面上的局部内容。是不是?(当年,还没有jquery这个神器呢,需要手写各种浏览器下不同的ajax实现)。

后来,大概09年,苏南大叔又从同事那边学来了jsonp这个概念,大概是一个比较厉害的跨域方案。最近几年,对jsonp这个概念又有了个更深刻的认识。

苏南大叔:跨域 ajax 请求之 jsonp 原理解析 - 跨越jsonp
跨域 ajax 请求之 jsonp 原理解析(图1-1)

好吧,不废话了。下面是要点:

jsonp本质上是个get请求

也就是说在用jquery发送这个jsonp请求的时候,只要你指定了dataType:'jsonp',那么你指定 type:'post'也是没用的,这个时候,这个请求肯定是get的,无视任何post设定。这个是新手非常容易忽略的一点。

后端角度看jsonjsonp差别

对于后端来说,区别稍稍有点。本来是输出正常的json,而使用jsonp之后呢,就需要写成个函数的样子了,就是首先要接受callback参数,然后把接收到的参数输出,然后输出一对括号,括号内部再输出json即可。例如:

$callback=@trim($_GET["callback"]);
$json=json_encode(["ok"=>"ok"]);
echo ($callback=="")?$json:$callback."(".$json.")";

结论

本跨域话题,是系列文章,会多写几篇的,欢迎大家关注。相关跨域专题的内容,请参见:https://newsn.net/tag/cors/

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接作者。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   ajax    cors

本站的忠实读者小伙伴,正在阅读下面这些文章: