博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSONP是如何工作的?
阅读量:5947 次
发布时间:2019-06-19

本文共 1459 字,大约阅读时间需要 4 分钟。

hot3.png

我对这个问题的探究来源于一个需求:

当访问某个页面的时候,需要向另外一个网站报告一下这次访问的信息。

其实发一个跨域的请求就能大致实现这个需求。我们发跨域的例子其实很常见,例如请求一个第三方的图片、引入一个第三方的样式文件、引入一个cdn上的js文件。然后,说到发送请求,在这个web2.0的时代,我们自然而然会想到Ajax请求。但是遗憾的是,考虑到安全问题,即所谓的,用ajax请求一个第三方的地址是被浏览器所禁止的。然而天无绝人之路,有个叫JSONP的技术就是来解决这种问题的。

说道JSONP,可能多数人对它的知晓程度仅限于jQuery,jQuery提供了发送jsonp请求的方法。比如在使用$.ajax()方法的时候:

// Using YQL and JSONP$.ajax({    url: "http://query.yahooapis.com/v1/public/yql",    // the name of the callback parameter, as specified by the YQL service    jsonp: "callback",    // tell jQuery we're expecting JSONP    dataType: "jsonp",    // tell YQL what we want and that we want JSON    data: {        q: "select title,abstract,url from search.news where query=\"cat\"",        format: "json"    },    // work with the response    success: function( response ) {        console.log( response ); // server response    }});

jQuery将jsonp请求封装成类似ajax请求的样子,这样能让开发者在使用的时候更加方便,但是实际上,jsonp压根不是通过XMLHttpRequest来实现的。

 

var callbackName = 'iAmTheCallback';window[callbackName] = function (uuu, vvv, www) {    // 对返回的数据做后续处理}var script = document.createElement('script');script.src = 'http://melon.github.io/xxx/yyy?callback='+callbackName;document.body.appendChild(script);

一个简单的JSONP请求可以通过一下代码实现:这是前端部分的代码,要想真正实现JSONP的功能,还需要后端的配合。针对上面这个例子,当前端请求这个script地址的时候,后端只要按以下内容响应就会有神奇的效果:

iAmTheCallback('abc', 'def', 'ghi');

说道这儿,很多人也许就恍然大悟了。JSONP名字听着高端,其实也不过如此嘛。

实际上,jQuery发JSONP请求时也是这么做的,去可以窥见一斑。

  • References:

转载于:https://my.oschina.net/liupengjun/blog/301341

你可能感兴趣的文章
Dominating Patterns
查看>>
截取指定字符串
查看>>
metrics-server最新版本有坑,慎用
查看>>
linux虚拟文件系统浅析
查看>>
HBase数据压缩编码探索
查看>>
sprint计划会议总结
查看>>
团队项目冲刺1
查看>>
fon循环总是返回最后值问题
查看>>
Android新权限机制 AppOps
查看>>
“蓝桥杯”软件大赛入门训练4道题
查看>>
Unable to get the CMake version located at
查看>>
爬虫基本原理
查看>>
Heritage from father
查看>>
css选择器
查看>>
使用多线程
查看>>
Django--Uploaded Files以及Handlers
查看>>
在IIS(64位)上部署WCF服务访问Oracle数据库
查看>>
个人在 laravel 开发中使用到的一些技巧(持续更新)
查看>>
iOS之KVO
查看>>
数组的代替品
查看>>