项目中要显示股票指数数据,由于咱们当前系统中没有这些数据,所以只能通过跨域去取数据。由于指数数据是实时数据,初定方案是通过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); }
|