你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Web开发
ajax 跨域取数据
 
项目中要显示股票指数数据,由于咱们当前系统中没有这些数据,所以只能通过跨域去取数据。由于指数数据是实时数据,初定方案是通过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);
  }
     

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089