数据服务器跨域取数据的方法

在写这篇文章之前,xxx已经写过了几篇关于改数据服务器主题的文章,想要了解的朋友可以去翻一下之前的文章

    跨域求请的方法有很多种,
1,iframe
2,document.domain
3,window.name
4,script
5,XDomainRequest (IE8+)
6,XMLHTTPRequest (Firefox3.5+)
7,postMessage (HTML5)
8,后台代理
...

    1.jsonp
其实 jsonp 是个很简单的一个西东。
主要是利用了 <script/> 标签对 javascript 文档的动态析解来实现。(其实也可以用eval函数)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head> <title>Test Jsonp</title> <script type="text/javascript"> function jsonpCallback(result) { alert(result.msg); } </script> <script type="text/javascript" src="http://uefirst.com/jsonServerResponse?jsonp=jsonpCallback"></script></head><body></body></html>

    其中 jsonCallback 是客户端册注的,取获跨域服务器上的json数据后,回调的函数。 uefirst.com/jsonServerResponse?jsonp=jsonpCallback 这个 url 是跨域服务器取 json 数据的接口,数参为回调函数的名字,回返的格式为

    jsonpCallback({msg:'this is json data'})

    Jsonp道理:
首先在客户端册注一个callback, 然后把callback的名字传给服务器。

    此时,服务器先生成 json 数据。
然后以 javascript 语法的方法,生成一个function , function 名字就是递传上来的数参 jsonp.
最后将 json 数据直接以入参的方法,放置到 function 中,这样就生成了一段 js 语法的文档,回返给客户端。
客户端浏览器,析解script标签,并行执回返的 javascript 文档,此时数据作为数参,传入到了客户端先预定义好的 callback 函数里.(动态行执回调函数)

    2.动态加载js
动态加载js数据
例如数据服务器有个页面a.com/1.php出输数据如下:

    var hqs2={Summary:{pages:1,page:1,total:1,hqtime:"20110422150108"},Column:{id:0,code:1,name:2,lcp:3,np:4,hlp:5,pl:6,scnt:7,ta:8,tm:9},HqData:[ ["1208","1208","黑龙江省",12.48,12.42,-0.06,-0.47,33,2182408,224596.97] ]};

    每日一道理
悲观的人,先被自己打败,然后才被生活打败;乐观的人,先战胜自己,然后才战胜生活。悲观的人,所受的痛苦有限,前途也有限;乐观的人,所受的磨难无量,前途也无量。在悲观的人眼里,原来可能的事也能变成不可能;在乐观的人眼里,原来不可能的事也能变成可能。悲观只能产生平庸,乐观才能造就卓绝。从卓绝的人那里,我们不难发现乐观的精神;从平庸的人那里,我们很容易找到阴郁的影子。

    调取页面b.com/1.html

    function GetJsData(src,callback){ var head=document.getElementsByTagName("head")[0]; var js=document.createElement("script"); js.setAttribute("src",src); js.οnlοad=js.onreadystatechange=function(){ if(!this.readyState||this.readyState=="loaded"||this.readyState=="complete"){ head.removeChild(js); if(callback) callback(); } } head.appendChild(js);}GetJsData('http://a.com/1.php',function(){ //加载实现... if(hqs2){ var total = hqs2.Summary.total; alert(hqs2.HqData[0][hqs2.Column.name]); }});//回返:黑龙江省

    3.通过服务器直达

    如asp.net服务端1.aspx

    public static string getContent(string url){ string strContent = ""; WebResponse response = null; Stream stream = null; StreamReader reader = null; HttpWebRequest requestiid = null; try { requestiid = (HttpWebRequest)WebRequest.Create(url); requestiid.Timeout = 30000; response = requestiid.GetResponse(); stream = response.GetResponseStream(); reader = new StreamReader(stream, System.Text.Encoding.Default); strContent = reader.ReadToEnd().ToString(); } catch (Exception ex) { //return null; } finally { if (reader != null) reader.Close(); if (stream != null) stream.Close(); if (response != null) response.Close(); if (requestiid != null) requestiid.Abort(); } return strContent;}Response.Write("http://a.com/1.js");

    这样就可以用一般ajax方法取读1.aspx了

文章结束给大家分享下程序员的一些笑话语录: 关于编程语言
如果 C++是一把锤子的话,那么编程就会变成大手指头。
如果你找了一百万只猴子来敲打一百万个键盘,那么会有一只猴子会敲出一 段 Java 程序,而其余的只会敲出 Perl 程序。
一阵急促的敲门声,“谁啊!”,过了 5 分钟,门外传来“Java”。
如果说 Java 很不错是因为它可以运行在所有的操作系统上,那么就可以说 肛交很不错,因为其可以使用于所有的性别上。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值