【www.bbyears.com--jquery】
我们知道,用服务端脚本做js来用可以实现通信,但是,他功能太简单,不够灵活,还是需要像ajax这样的通信来的方便。今天公司在使用phonegap时遇到了ajax跨域问题,我偷听了一下,总结了一下ajax两种跨域问题。嘿嘿。 当然这样应用场景是有前提的,一般情况下,我们都是在同个域名下,但是做客户端软件或手机应用,没有域,所以要解决跨域通信。
js 要跨域的话,可以用:
<script src="别的网站的js地址(这里的内空可以是动态生成的,如:aaa.jsp、bbb.aspx)都可以。"></script>这样是可以从别的网站里面读取出数据的。
关键是看你灵不灵活,会不会用了。
ajax要跨域的话,可以用服务器去别的网站取内容,如asp.net的:
代码如下 public string GetUrlData(string url)
{
System.Net.HttpWebRequest webRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
System.Net.WebResponse webResponse = webRequest.GetResponse();
System.IO.Stream iStream = webResponse.GetResponseStream();
System.IO.StreamReader sr = new System.IO.StreamReader(iStream, System.Text.Encoding.Default);
string str = sr.ReadToEnd();
sr.Close();
iStream.Close();
webResponse.Close();
return str;
}
这个方法已经写好了,你只要传入网站的url地址,就可以得到你要的ajax返回值。
这样就将别的网站的ajax请求,写到了自已的服务器里,然后你再用ajax去请求自已写好的那个
aspx地址就可以了。
如果是java,也是同样的道理,如:
URL url = new URL("http://www.111cn.net/");
FilterInputStream f=(FilterInputStream)url.openStream();
另一种办法利用jsonp
这个大家可以查一下,这里直接贴实例
html代码
<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>
a/1.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等的服务端脚本,头信息加入
代码如下
header("Access-Control-Allow-Origin: *");
这样,其脚本的返回值就可以在任何域下使用了,ajax保持原来的用法即可。
后部份来自:张存超博客 521php.com 前部份自己整理。