1. 程式人生 > >【跨域Jsonp】是否可以用jsonp完成跨域? nodejs釋出的服務可以

【跨域Jsonp】是否可以用jsonp完成跨域? nodejs釋出的服務可以

關於jsonp跨域的原理參考其他日誌。
1、jsonp跨域只能為get,不能為post。靠url傳遞資料
2、soap協議的 好像不能使用jsonp,他返回的始終是xml,不能以js的方式返回,會出現錯誤:不能解析xml為js。
3、用nodejs寫一個http服務,用jsopn是否可以跨域:可以!!

服務端的程式碼為:

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); })

前端的程式碼為:

<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>

此時也可以在服務端設定允許跨域,方式如下:

res.writeHead(200, {
                            'Content-Type': 'application/json;charset=utf-8',
                            'Access-Control-Allow-Origin': '*'
                        });

但是當我採用java+axis+tomcat時,此時不可以用這種方法實現跨域,因為此時的webservice遵從soap協議,以xml格式互動資料。而jsonp要求返回的資料為js格式,因此無法控制。
不過可以看看用action或者servlet寫服務端。
也就是說:當前端希望採用jsonp方式實現跨域時(只能是get方式),後端要根據url判斷是否有callback,有的話要返回js格式。