json和jsonp

1. json

json的全名是JavaScript Object Notation(js對象標記),也就是一種數據結構,多用於數據結構描述。javascript

2. jsonp

jsonp的全稱是json with padding(json的襯墊),就是對json數據作一下其餘處理。html

3. jsonp的由來

ajax不容許跨域請求,可是html有個漏洞就是帶src標籤的東西是能夠跨域的,如前端

<script src=""/>
<img src=""/>

jsonp就是基於這個來實現的跨域請求。java

4. jsonp前端原生實現

// index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    
</head>
<body>
    <script type="text/javascript">
        function cb(data) {// 默認回調函數是cb
            alert(data.name);
        }
    </script>
    <script src="http://127.0.0.1:3000?callback=cb"></script>
</body>
</html>

5. jsonp後端實現

// index.js
var http = require('http');

http.createServer((req, res) => {
  res.writeHead(200, {
    'content-type': 'text/json;charset=utf-8'
  });
  var data = {
    "name": "michael"
  };
  data = JSON.stringify(data);
  //假設咱們定義的回調函數名爲cb
  var callback = 'cb' + '(' + data + ');';
  res.end(callback);
}).listen(3000);

6. 運行

首先在index.js所在的文件夾下執行node

node index.js

而後在index.html所在的文件夾下執行ajax

http-server -p 4000

這樣一個3000端口,一個4000端口,實現了跨域請求。此時打開index.html,會展現alert('michael')json

7. 後記

以上只是簡單實現,若是想在項目中大規模使用須要封裝不少東西。若是在開發環境中使用徹底能夠使用代理服務器完成,若是真的有跨域的業務,這也是一種解決方案。後端

相關文章
相關標籤/搜索