写了个简单的跨域访问的例子,服务端用的PHP,其他语言类似,只要格式正确就可以了。
jsonp 跨域访问原理介绍:
客户端:
<html> <head> <title>php</title> <script type="text/javascript" src="js/jquery-1.9.1.min.js"></script> <script type="text/javascript"> // 对 jsonp 简单的封装 // url 跨域url // callback 回调函数 // args 请求的参数,可以包含要调用服务名和方法名等 var Ajax = { jsonp : function(url, callback, args){ var url = url + '?callback=' + callback; // 参数必须为object格式,key-value if(args && typeof(args) === 'object'){ for(key in args){ url = url + '&' + key + '=' + escape(args[key]); } } // 创建并添加script var script = document.createElement('script'); script.setAttribute('src', url); document.getElementsByTagName('head')[0].appendChild(script); } } // 回调函数 // 当请求成功并返回时调用 function getData(data){ console.log(data); } //跨域调用 var args = {}; // 参数列表 args.controller = 'Test'; args.action = 'a'; // 请求(url, 回调函数, 参数列表key-value) Ajax.jsonp('http://localhost:8082/jsonp/index.php', 'getData', args); </script> </head> </html>
服务端,也就是上面url的地址:
<?php // 服务端使用PHP,其他语言类似 // 接收参数 $controller = $_GET['controller']; $action = $_GET['action']; // 回调函数 $callback = $_GET['callback']; // 根据参数调用对应的服务和方法 $c = new $controller; $data = $c->$action(); // 输出 格式为 getData('此处是返回值') echo $callback . "('" . $data . "')"; class Test{ function a(){ return 'you called me'; } } ?>