jquery ajax跨域_jquery实现ajax跨域读取数据的例子

更新时间:2019-05-29    来源:jquery    手机版     字体:

【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代码

 代码如下



 
 
 
 
 
 
  Document
 
 
 <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 前部份自己整理。

本文来源:http://www.bbyears.com/wangyezhizuo/52459.html