我们知道,用服务端脚本做js来用可以实现通信,但是,他功能太简单,不够灵活,还是需要像ajax这样的通信来的方便。今天公司在使用phonegap时遇到了ajax跨域问题,我偷听了一下,总结了一下ajax两种跨域问题。嘿嘿。
当然这样应用场景是有前提的,一般情况下,我们都是在同个域名下,但是做客户端软件或手机应用,没有域,所以要解决跨域通信。
第一种方式就是jsonp
这个大家可以查一下,这里直接贴实例
html代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Document</title> </head> <body> <script src="jquery-1.8.3.min.js"></script> <script type="text/javascript"> jQuery(document).ready(function(){ $.ajax({ type: "GET", async: false, //url: "http://test/jsonp.php", url:"http://local.ok.com/1.php", dataType: "jsonp", jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback) jsonpCallback:"bbb",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据 success: function(json){ alert('您查询到航班信息:票价: ' + json.price + ' 元,余票: ' + json.tickets + ' 张。回调函数名为: '+json.func); }, error: function(){ alert("fail"); } }); }); </script> </body> </html> |
local.ok.com/1.php代码
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $callback = isset($_GET["callback"]) ? $_GET["callback"] : 'flightHandler'; $a = array( 'code'=>'CA1998', 'price'=>'6000', 'tickets'=>20, 'func'=>$callback, ); $result = json_encode($a); echo "{$callback}($result)"; exit; ?> |
这样你直接双击运行html或在其他域名主机下运行可以实现通信
第二种方式,就是php等的服务端脚本,头信息加入
1 |
header('Access-Control-Allow-Origin: *'); |
这样,其脚本的返回值就可以在任何域下使用了,ajax保持原来的用法即可。
程序本天成,妙手偶得之!我们只是代码的搬运工!
转载请注明:http://www.521php.com/archives/1697/
2014年04月28日 下午 10:14 服装搭配技巧 | 引用 | #1
程序工作者,辛苦了,加油。也希望楼主有空去我网站玩玩。www.oradre.com