前一段需要用Ajax完成一个页面,但后来因为后台处理程序和页面不在一个二级域下,用XMLHTTP根本无法实现,无奈之下只能另寻解决方案。这就让我想到了用改变的src来试试,原理是这样的:
首先,在页面里放一个标签,给其定一个ID,把要返回的数据以Get方式连成串生成一个script的地址,然后改变script的src。在IE下测试通过,新载入的js代码会被执行,这样你就可以在新的js文件中把数据直接以一个Array或其它脚本的方式传递过来了,比用XMLHTTP去读数据要方便多了,还可以任意执行你想执行的方法。
但是,这样在firefox下是不行的,改变
function getJsData(url){
if(!GetObj("ScriptBox")){
var DivObj = document.createElement_x("div");
DivObj.id = "ScriptBox";
DivObj.style.display = "none";
document.body.appendChild(DivObj);
}
var Snode = document.createElement_x("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.getElementByIdx){
return ('document.getElementByIdx("' + objName + '")');
}else{
return ('document.all.' + objName);
}
}
这样你只需要在想获取数据时调用getJsData()方法就可以了,不用在页面中再去放
用script的方法比用iframe的优点要多,iframe会产生浏览器的历史记录,这会影响到“前进”“后退”按钮,并且iframe通过设置domain,最多可以跨二级域,而script可以直接跨全域,这一点既是它的优点也是它的缺点,因为别人也可以在他的页面上也轻松的调用你的数据!