【跨域Jsonp】是否可以用jsonp完成跨域? nodejs釋出的服務可以
阿新 • • 發佈:2018-12-22
關於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格式。