一、开始
首先我们要明确 JSON 和 JSONP 的区别
- JSON:JSON 是一种基于文本的数据交换方式,或者叫做数据描述格式
- JSONP:是 JSON 的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题
两者不是同一个概念,JSONP 就是利用 src 属性的跨域能力来实现跨域通讯。
二、模拟
- 我们来实现 html 的代码,其实就是写个回调的方法,以及 script 标签
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <head> <title>jsonp</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <script> function test(data){ alert(data.name); }; </script> <script src="http://localhost:8080/jsonp?callback=test"></script> </body> </html>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| var http = require('http') var url = require('url') var querystring = require('querystring') const PORT = 8080; var server = http.createServer(); //通过request事件来响应request请求 server.on('request',function(req, res){ var urlPath = url.parse(req.url).pathname; var qs = querystring.parse(req.url.split('?')[1]); // 把query参数解析成对象 // 我们规定如果path是'/jsonp'就是jsonp请求 if(urlPath === '/jsonp' && qs.callback){ res.writeHead(200,{'Content-Type':'application/json;charset=utf-8'}); var data = { "name": "lastnigtic" }; // 相当于是在写一段js代码 data = JSON.stringify(data); var callback = qs.callback+'('+data+');'; res.end(callback); } }); server.listen(PORT, () => { console.log('listening at Port ' + PORT) });
|
到了这一步,只要启动服务器,就可以实现我们的跨域请求数据了!