初体验ajax跨域
之前一直以为ajax是不能跨域的,从来也没尝试过。今天体验了一下ajax跨域请求数据,分享一样。
公司做了一个纯静态HTML的网站,可是公司领导说让加公告,因为我们的后台管理系统和静态页面在不同的服务器上,不同的域名,而HTML服务器也没有PHP环境,这就需要两个域之间的数据交换。讨论了下各种的实现方式,淘汰了iframe,后来用script加载技术。具体如下:
<script src="http://www.baidu.com"></script>
这个实现方法有一个局限性,如果需要传递参数怎么办?例如:http://localhost/test/index.php?id=3
首先这是一个HTML纯静态的页面,只能用JS来获取get参数。
JS获取get参数,去网上搜了下,代码如下:
var url=document.URL; var para=''; if(url.lastIndexOf("?")>0) { para=url.substring(url.lastIndexOf("?")+1,url.length); var arr=para.split("&"); para=""; for(var i=0;i<arr.length;i++) { para = arr[i].split("=")[1]; } //para 为第一个参数的值 }
获取了参数的值,拼装成我们要加载的链接,这样貌似就可以实现我们的功能了。
其实则不然。我们实现的方法在于用javascript加载远程链接。但是在加载之前我们需要获得参数的值来确定链接(例:http://localhost/test/index.php?id=3),但是浏览器的工作机制是先加载完HTML才开始运行JS的脚本,前后顺序矛盾,所以这种实现办法宣告失败!
记得之前做过一个项目,类似于获取新浪股票的数据,然后实时显示。这个就用到了ajax的跨域。
后来去网上搜了一下,发现JQuery对于Ajax的跨域请求有两类解决方案,不过都是只支持get方式。分别是JQuery的 jquery.ajax jsonp格式和jquery.getScript方式。(http://www.open-open.com/lib/view/open1334026513327.html)
新浪股票获取方式就是用到script的方式。
$.ajax({ url:"http://localhost/index.php?id="+para, dataType:"script", cache:"false", type:"GET", success:function(a){ $("#title").html(announce_title); $("#date").html(announce_date); $("#content").html(announce_content); } });
而http://localhost/index.php?id=3打印出来是这种格式的
var announce_title="mytitle"; var announce_date="2013-04-17 13:36:15"; var announce_content="this is a test";
所以在远程只要输出上面这样的数据格式,就可以实现html和系统间的数据交换了。
又涨姿势了。