前一段需要用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