用nodejs實現json和jsonp服務

1、JSON和JSONPjavascript

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

      由此咱們能夠看出二者的區別:java

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

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

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

 

      2、實現跨域

      爲了簡單起見,咱們要讀取數據都是服務器

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

 1. 服務器端代碼:jsonp

var http = require('http');
var urllib = require('url');

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

http.createServer(function(req, res){
  var params = urllib.parse(req.url, true);
  console.log(params);
  if (params.query && params.query.callback) {
    //console.log(params.query.callback);
    var str =  params.query.callback + '(' + JSON.stringify(data) + ')';//jsonp
    res.end(str);
  } else {
    res.end(JSON.stringify(data));//普通的json
  }     
}).listen(port, function(){
  console.log('server is listening on port ' + port);  
})

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

<html>  
<head>  
  <script src="http://code.jquery.com/jquery-latest.js"></script>  
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
</head>  
<body>  
<script type="text/javascript">  
function get_jsonp() {  
  $.getJSON("http://10.232.36.110:10011?callback=?",  
  function(data) {
    $('#result').val('My name is: ' + data.name);  
  });  
}  
</script>  
<a href="javascript:get_jsonp();">Click me</a><br />  
<textarea id="result" cols="50" rows="3"></textarea>  
</body>  
</html>  

  jquery中getJSON()方法能夠參見:http://www.w3school.com.cn/jquery/ajax_getjson.asp

相關文章
相關標籤/搜索