职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 544|回复: 14

ajax 跨域取数据

  [复制链接]
叫我小乖 发表于 2011-7-30 09:47 | 显示全部楼层 |阅读模式
第一次分享。。。 有啥不对的地方。。还望指出! 若有更好的解决方案,呵呵。。 也希望能得到分享!。
     背景: 项目中要显示股票指数数据,由于咱们当前系统中没有这些数据,所以只能通过跨域去取数据。由于指数数据是实时数据,初定方案是通过ajax每隔3秒去指定的地址去拿数据。

var requestObject = {
    url : "地址",
    vars : "参数",
    callBack : 回调函数,
    method : "post",
  };
  var ajax = new TFL.ajax2(); //对XmlHttpRequest 做了封装
  ajax.ajaxRequest(requestObject);
本地测试通过。。。 上测试环境(正式环境)发现不行!。。 才发现ajax无法跨域取数据。(呵呵,web新手。。见笑了)
第二中方案:
     利用js创建dom的原理,去动态创建一个<script></script>  在指定 scr的值 。
function c(){
  var date = new Date();
  var hours = date.getHours();
  
  if(hours>=9 && hours <=15){//开盘时间
  a();  }
}

function a(){
  var head= document.getElementsByTagName('head')[0];
     var script= document.createElement('script');
     script.type= 'text/javascript';
     // 回调只对firefox有效
     script.onreadystatechange= function () {
        if (this.readyState == 'complete') {
            b();
        };
     }
     script.onload= 回调函数;
     // 回调只对firefox有效
     script.src= b;
     head.appendChild(script);
}
function b(){//回调函数
}
setInterval("c()"3000);

上面遗留了一个问题,就是在ie下无法执行回调函数,只能直接去调用函数,但也许会出现这样一种情况,就是数据还在加载,js直接调用回调函数的代码就已经执行了,导致无法取到数据。
我的解决方案是 :  先判断浏览器,然后在通过定时器去定时执行回调函数。(说白了就是ie下推迟执行回调函数)
// 判断是否ie
  var is_opera = /opera/i.test(navigator.userAgent);  
  var is_ie = (/msie/i.test(navigator.userAgent) && !is_opera)
  if(is_ie){
      setInterval("c()",4000);
  }
     
   以上是我的总结。 。 呵呵   。热烈欢迎踊跃提意见啊。!

hxy 发表于 2011-7-30 09:47 | 显示全部楼层
呵呵,其实还有第三种方案
ajax->自己的服务器->URL.openStream(Java),得到数据->写入outputstream->ajax.responseText

过一次服务器,就不怕跨域了。而且没有不同浏览器的障碍。

月上萧萧 发表于 2011-7-30 09:47 | 显示全部楼层
是啊,服务器转发下就行了

紫衿 发表于 2011-7-30 09:47 | 显示全部楼层
现在已经有flash和Ajax实现的跨越访问的框架了,又何苦自己写,又不兼容呢?
而且jquery 1.2以后就有对jsonp的支持啦!
Js代码  
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function(data){   
  $.each(data.items, function(i,item){   
    $("<img/>").attr("src", item.media.m).appendTo("#images");   
    if ( i == 3 ) return false;   
  });   
});  

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function(data){
  $.each(data.items, function(i,item){
    $("<img/>").attr("src", item.media.m).appendTo("#images");
    if ( i == 3 ) return false;
  });
});  Js代码  
jQuery.getScript("http://dev.jquery.com/view/trunk/plugins/color/jquery.color.js", function(){   
  $("#go").click(function(){   
    $(".block").animate( { backgroundColor: 'pink' }, 1000)   
      .animate( { backgroundColor: 'blue' }, 1000);   
  });   
});  

jQuery.getScript("http://dev.jquery.com/view/trunk/plugins/color/jquery.color.js", function(){
  $("#go").click(function(){
    $(".block").animate( { backgroundColor: 'pink' }, 1000)
      .animate( { backgroundColor: 'blue' }, 1000);
  });
});  

fl 发表于 2011-7-30 09:48 | 显示全部楼层
jquery取跨域数据也是用script标签实现的。

能文能武 发表于 2011-7-30 09:48 | 显示全部楼层
还可以用jsonp
用jquery很方便能做到
je里能搜到相关文章

jinchang 发表于 2011-7-30 09:48 | 显示全部楼层
使用Hprose跨域更方便,不需要任何特殊写法,直接使用RPC方式,想怎么跨就怎么跨。支持所有浏览器,甚至在手机上都可以让您轻松实现Ajax跨域访问。

gz-vps 发表于 2011-7-30 09:48 | 显示全部楼层
andot
使用Hprose跨域更方便,不需要任何特殊写法,直接使用RPC方式,想怎么跨就怎么跨。支持所有浏览器,甚至在手机上都可以让您轻松实现Ajax跨域访问。


安全性怎么保证呢?


郁闷小男人 发表于 2011-7-30 09:48 | 显示全部楼层
yin_bp
andot
使用Hprose跨域更方便,不需要任何特殊写法,直接使用RPC方式,想怎么跨就怎么跨。支持所有浏览器,甚至在手机上都可以让您轻松实现Ajax跨域访问。


安全性怎么保证呢?


可以通过设置身份认证,访问权限等多种方式来保证。


fossil 发表于 2011-8-3 12:09 | 显示全部楼层
顶!!!!!!!!!!!!!!!!!!!!!!!!!
broken 发表于 2011-8-3 12:09 | 显示全部楼层
看你快沉底了~~~~~~
 楼主| 叫我小乖 发表于 2011-8-5 11:47 | 显示全部楼层
今天看了下自己统计
Jethro 发表于 2011-8-8 10:24 | 显示全部楼层
我晕到了~~~
gz-vps 发表于 2011-8-11 14:36 | 显示全部楼层
呵呵 我可不敢~~~~
楠楠 发表于 2011-8-15 09:16 | 显示全部楼层
你你你你 呵呵~~~~别这样哦.....
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-28 08:25 , Processed in 0.156542 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表