java js跨域原理,Ajax跨域的解决办法:载入javascript(js)文件实现无刷

前一段需要用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可以直接跨全域,这一点既是它的优点也是它的缺点,因为别人也可以在他的页面上也轻松的调用你的数据!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值