ajax使用responseText返回的数据中的js代码是不能直接执行的,要让ajax返回的js执行起来,需要考虑两种情况。
情况一:ajax 返回的数据是纯js代码,并且不含<script>标签对
这种情况是最简单的,直接使用eval()函数就行了,处理 ajax 的核心代码如下- ajax.onreadystatechange=function(){
- if(ajax.readyState==4&&ajax.status==200){
- eval(ajax.responseText);
- }
- };
复制代码 情况二:返回的数据中既有html代码也有js代码
这种情况需要用正则将ajax返回数据中的<script>标签对匹配出来,使用情况一中的方法eval,然后再删除ajax返回数据中的这些JS代码。
处理 ajax 的核心代码如下- ajax.onreadystatechange=function(){
- if(ajax.readyState==4&&ajax.status==200){
- var rs=ajax.responseText;
- var reg=/<\s*script\s*[^>]+>([\s\S]+?)<\/script>/gi;
- var ms;
- while(ms=reg.exec(rs)){
- eval(ms[1]);
- }
- rs=rs.replace(reg,'');
- document.getElementById('show').innerHTML = rs;
- }
- };
复制代码 情况三:ajax 返回的数据中只有由<script>标签对包裹的js代码
这种情况只要用函数删除<scrip>标签对再eval()就行了,原理和上面两种其实是一样的。 |
|