【跨域Jsonp】是否可以用jsonp完成跨域? nodejs发布的服务可以

来源:互联网 发布:西北师范大学知行 编辑:程序博客网 时间:2024/06/05 20:33

关于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格式。

0 0
原创粉丝点击