处理Ajax返回的js脚本

3 篇文章 0 订阅

在不做处理的情况,innerHTML->responseText 返回的 javascript 脚本是无效的;

现在我们做如下的处理:

var Id;
		//myRequsest对象的声明,要放到两个方法之外,以保证两个方法获得的同一个对象
		var myRequest; 
		function t1(id,url) {
			Id = id;
			///Ajax begin------------------->
			if(window.XMLHttpRequest) {	// 非IE浏览器
				myRequest = new XMLHttpRequest();
					if(myRequest.overrideMimeType) {
						myRequest.overrideMimeType("text/xml");
					}
			} else if (window.ActiveXObject) {	// IE浏览器
				try{
					myRequest = new window.ActiveXObject("Msxml2.XMLHTTP");
				} 
				catch(e){
					try{
						myRequest = new window.ActiveXObject("Microsoft.XMLHTTP");
					} 
					catch(e) {
					}
				}
			}
			//注册一个无参的回调方法
			myRequest.onreadystatechange = t2;
			//提交到哪儿去
			myRequest.open("Post",url,true); // 有外部的项目名如:  /项目名/命名空间/方法
			myRequest.send(null);	
		}	
		function t2() {
			if (myRequest.readyState == 4) {
				var ret = myRequest.responseText;
				//后续处理
				document.all(Id).innerHTML = ret;
				executeScript(ret);
			}
		}
t1是Ajax原方法,t2是Ajax的回调方法,executeScript是自定义方法如下:

function executeScript(html)
{
	var reg = /<script[^>]*>([^\x00]+)$/i;
	//对整段HTML片段按<\/script>拆分
	var htmlBlock = html.split("<\/script>");
	for ( var i in htmlBlock)
	{
		var blocks;//匹配正则表达式的内容数组,blocks[1]就是真正的一段脚本内容,因为前面reg定义我们用了括号进行了捕获分组
		if (blocks = htmlBlock[i].match(reg))
		{
			//清除可能存在的注释标记,对于注释结尾-->可以忽略处理,eval一样能正常工作
			var code = blocks[1].replace(/<!--/, '');
			try {
				eval(code) //执行脚本
			} catch (e) { }
		}
	}
}


这样一般情况就能满足Ajax返回数据含js脚本的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值