您的位置:首页 > Web前端 > JavaScript

Ajax跨域的解决办法:载入javascript(js)文件实现无刷新更新数据(转载)

2009-12-04 09:46 826 查看
前一段需要用Ajax完成一个页面,但后来因为后台处理程序和页面不在一个二级域下,用XMLHTTP根本无法实现,无奈之下只能另寻解决方案。这就让我想到了用改变<srcipt>的src来试试,原理是这样的:

首先,在页面里放一个<scritp>标签,给其定一个ID,把要返回的数据以Get方式连成串生成一个script的地址,然后改变script的src。在IE下测试通过,新载入的js代码会被执行,这样你就可以在新的js文件中把数据直接以一个Array或其它脚本的方式传递过来了,比用XMLHTTP去读数据要方便多了,还可以任意执行你想执行的方法。

但是,这样在firefox下是不行的,改变<script>的src对firefox似乎一点作用都不起,载入的脚本根本不执行,没有一点意义,后来在同事的提醒下找到了firefox的解决办法,就是用createElement创建一个<srcipt>对象,然后改变它的src,果然,在firefox下可以了。把这段代码发给大家,希望对大家能有点帮助:

function getJsData(url){
if(!GetObj("ScriptBox")){
var DivObj = document.createElement("div");
DivObj.id = "ScriptBox";
DivObj.style.display = "none";
document.body.appendChild(DivObj);
}
var Snode = document.createElement("script");
Snode.setAttribute("type", "text/javascript");
Snode.setAttribute("language", "javascript");
Snode.setAttribute("src", url);
GetObj("ScriptBox").innerHTML = "";
GetObj("ScriptBox").appendChild(Snode);
}

function GetObj(objName){
if(document.getElementById){
return eval('document.getElementById("' + objName + '")');
}else{
return eval('document.all.' + objName);
}
}

这样你只需要在想获取数据时调用getJsData()方法就可以了,不用在页面中再去放<script>标签。

用script的方法比用iframe的优点要多,iframe会产生浏览器的历史记录,这会影响到“前进”“后退”按钮,并且iframe通过设置domain,最多可以跨二级域,而script可以直接跨全域,这一点既是它的优点也是它的缺点,因为别人也可以在他的页面上也轻松的调用你的数据!

转载请保留本blog地址:http://hi.baidu.com/uitech

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐