日期:2014-05-16  浏览次数:20827 次

执行ajax返回的script代码

晕死,自已在这里面加个表面就把页面给变了不成样子了,重发下。

?

问题:在使用ajax调用页面时,另一个页面中script中的ready并不执行;
分析:页面在打开时只加载一次script,所以利用ajax返回的页面中ready并不执行;
解决:

1 、取返回页面内容中的 js 内容

function getJavaScript(data) {

    var script, scripts;

    scripts = [];

    var regexp = /]*>([\s\S]*?)<\/script>/gi;

    while ((script = regexp.exec(data))) {

        scripts.push(script[1]);

    }

    return scripts;

}
?



2 、处理 js

function evalJavaScript(scripts) {

    scripts = scripts.join('\n');

     if (scripts)

        (window.execScript) ? window.execScript(scripts) : window.setTimeout(

                scripts, 0);

    return true;

}
?

?

?

1 楼 hommy8 2010-05-21  
这么实用的技巧,为什么没有人来顶?
赞一个,不过暂时没有时间试试。。以后测试一下

另外,估计LZ肯定很少发帖子,代码搞到一边去了
2 楼 lovself 2010-05-22  
楼主有遇到这样的情况吗?ajax返回代码中有外部js文件的引用,请问这个怎么处理啊
3 楼 xdsnet 2010-05-22  
我认为:
如果在ajax中需要临时取得script,来进行交互,可以直接构建一个script对象来获取返回,在返回中有script真实执行代码,以此来完成执行。
如:
在body的最后插入一个script对象,其中script对象有顶层直接执行代码,这些代码就可以执行了。
4 楼 sixwinds 2010-05-25  
但是我试验过返回一段html代码 里面带有script 用innerHTML赋值之后那段script还是能执行的
5 楼 thoughtfly 2010-05-25  
lovself 写道
楼主有遇到这样的情况吗?ajax返回代码中有外部js文件的引用,请问这个怎么处理啊


你有没有发现,我的执行代码里是先用正则取出来script标签里的代码再执行的,这样的话,你那个引用外部的js是肯定没法运行了,如果是我的话,我肯定会在头文件中把所要的所有js全部分引入,反正都是引用的,这样就没你的麻烦了。
6 楼 thoughtfly 2010-05-25  
sixwinds 写道
但是我试验过返回一段html代码 里面带有script 用innerHTML赋值之后那段script还是能执行的


我不是说代码不能执行,而是说页面不会再次初始化加载,这样像返回中的onload之类的代码就没办自动执行了。
7 楼 xukaipeng 2010-05-26  
今天看到一个帖子是这样描述的:


不过现在都不建议用eval了,解析JSON,可以用这个
function jsonDecode(data){
    return (new Function("return " + data))();
}

其他要想实现类似的eval的功能,一般都是在DOM中创建一个script节点,然后script.text = data;

jQuery1.4中就是如此,其他好几种Javascript框架都是这么做的。