本文主要是介绍【跨域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格式。
这篇关于【跨域Jsonp】是否可以用jsonp完成跨域? nodejs发布的服务可以的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!