初体验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和系统间的数据交换了。

  又涨姿势了。

posted @ 2013-05-10 15:10  源来如此  阅读(1803)  评论(11编辑  收藏  举报