用nodejs實現json和jsonp服務

一、JSON和JSONP

      JSONP的全稱是JSON with Padding,由於同源策略的限制,XmlHttpRequest只允許請求當前源(協議,域名,端口)的資源。如果要進行跨域請求,我們可以通過使用html的script標記來進行跨域請求,並在相應中返回要執行的script代碼,其中可以直接使用JSON傳遞javascript對象。這種跨域的通訊方式成爲JSONP。

      由此我們可以看出兩者的區別:

      json: 一種輕量級的數據格式。

      jsonp:爲實現跨域,而採用的一種腳本注入方法。

      備註:要了解更多json,可以參見我原先寫的一篇介紹json的文章:《JSON那些事》


      二、實現

      爲了簡單起見,我們要讀取數據都是

var data = {'name': 'jifeng', 'company': 'taobao'};

 

      1. 服務器端代碼:

[javascript] view plaincopy
  1. var http = require('http');  
  2. var urllib = require('url');  
  3.   
  4. var port = 10011;  
  5. var data = {'name''jifeng''company''taobao'};  
  6.   
  7. http.createServer(function(req, res){  
  8.   var params = urllib.parse(req.url, true);  
  9.   console.log(params);  
  10.   if (params.query && params.query.callback) {  
  11.     //console.log(params.query.callback);  
  12.     var str =  params.query.callback + '(' + JSON.stringify(data) + ')';//jsonp  
  13.     res.end(str);  
  14.   } else {  
  15.     res.end(JSON.stringify(data));//普通的json  
  16.   }       
  17. }).listen(port, function(){  
  18.   console.log('server is listening on port ' + port);    
  19. })  


 

      2. 遊覽器端代碼,爲方便起見,我直接用了jquery的方法

[javascript] view plaincopy
  1. <html>    
  2. <head>    
  3.   <script src="http://code.jquery.com/jquery-latest.js"></script>    
  4.   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    
  5. </head>    
  6. <body>    
  7. <script type="text/javascript">    
  8. function get_jsonp() {    
  9.   $.getJSON("http://10.232.36.110:10011?callback=?",    
  10.   function(data) {  
  11.     $('#result').val('My name is: ' + data.name);    
  12.   });    
  13. }    
  14. </script>    
  15. <a href="javascript:get_jsonp();">Click me</a><br />    
  16. <textarea id="result" cols="50" rows="3"></textarea>    
  17. </body>    
  18. </html>  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章