如何解决用ajax请求来的页面但是js不执行

26人阅读 评论(0) 收藏 举报
分类:

事件背景

有一个公用页面需要在多个页面调用,其中涉及到部分js已经写在了公用页面中,通过ajax加载该页面后无法执行其中的js。

解决思路

1. 采用附加一个iframe的方法去执行js,为我等代码洁癖者所不齿。

2. 使用document.write输出代码,我等简洁主义者所不愿。

3. 最简单的方法是把js放到需要调用的父页面,那想这样的公用页面,每个地方调用都要写入一次,代码冗余。

4. eval是个解决方法,虽然低效。

5. 复杂的解决方法:正则匹配出加载页面中的所有js,为这些js创建同样多个<script>标签,把js内容插入即可执行。但使用中发现,firefox可行,但IE还是不从。(师太,您就从了吧~)

解决方案

综合以上多种方式,排除不利因素,总结出一个比较实用的方法,可以满足类似这样公用页面的执行ajax加载的js的需求,在ajax加载的公用函数里面加上代码即可。主要代码如下:

复制代码

// 第一步:匹配加载的页面中是否含有js
var regDetectJs = /<script(.|\n)*?>(.|\n|\r\n)*?<\/script>/ig;
var jsContained = ajaxLoadedData.match(regDetectJs);

// 第二步:如果包含js,则一段一段的取出js再加载执行
if(jsContained) {
    // 分段取出js正则
    var regGetJS = /<script(.|\n)*?>((.|\n|\r\n)*)?<\/script>/im;

    // 按顺序分段执行js
    var jsNums = jsContained.length;
    for (var i=0; i<jsNums; i++) {
        var jsSection = jsContained[i].match(regGetJS);

        if(jsSection[2]) {
            if(window.execScript) {
                // 给IE的特殊待遇
                window.execScript(jsSection[2]);
            } else {
                // 给其他大部分浏览器用的
                window.eval(jsSection[2]);
            }
        }
    }
}

复制代码

解说下:window.execScript就IE认,其他浏览器需要用eval啦。

至此,算比较完美的解决。

转自:http://www.impng.com/web-dev/execscript-loaded-by-ajax.html

查看评论

ajax动态加载js,导致js不执行失效问题

一、首先必须清楚,ajax动态加载的js,是全部的js都不好使,都不执行,都无效了吗? 这点,我认为很关键,但是网上的文章都其实是一篇文章,是一个人写的。他并没有强调这一点,导致所有的文章都没有...
  • singinneteasy
  • singinneteasy
  • 2013-12-02 12:36:49
  • 4320

Ajax中主页加载分页面后,分页面js脚本不执行的解决办法

最近捣鼓JQuery,其中强大的Ajax系列函数令人印象深刻,所以做项目时毫不犹豫地采用了一下该技术,在主页中动态加载分页面进来,咋看效果不错,都能实现了第一层次的加载,但深入下去问题就出来了:动态加...
  • idoiknow
  • idoiknow
  • 2011-02-28 11:50:00
  • 10136

Ajax页面缓存问题分析与解决办法

Ajax页面缓存是ajax处理数据时对一些重复相同数据进行一个缓存操作,这样从另一个层面对于我们来讲是非常的不错了,但有时我们并不希望它缓存要如何处理呢?下面我们一起来看看关于页面缓存问题分析与解决,...
  • u012836851
  • u012836851
  • 2015-11-20 11:52:34
  • 10095

ajax请求后台方法成功但是不执行回调函数

相关知识 1.数据返回格式要求 2.json和jsonp的区别 3.jsonp对post和get貌似有区别 4.跨域问题...
  • chaokuo6764
  • chaokuo6764
  • 2017-11-02 16:58:17
  • 1131

Ajax请求在后台已执行,但是返回前台404/403

可能是后台忽略了注解@ResponseBody,这个注解的作用是将函数返回值作为请求返回值。没有这个注解的话,请求的响应应该是一个页面,不需要页面的话应该加上这个注解。...
  • Emperor003
  • Emperor003
  • 2016-04-26 10:31:17
  • 4949

ajax异步请求防止重复提交的方法

JS通过ajax发起异步请求时,经常会出现一个按钮快速多次点击时,请求进行了多次提交,可能导致很多不必要的问题出现,比如写入某些脏数据等。   此处针对ajax发起请求多次提交的问题进行JS代码处理的...
  • qq_34573369
  • qq_34573369
  • 2017-10-10 12:15:14
  • 1116

jquery ajax请求成功,返回了数据,但是不进success回调函数的问题

来自http://www.myexception.cn/ajax/413061.html --------------------------拷贝内容 start ------------------...
  • u010265663
  • u010265663
  • 2016-06-11 16:34:02
  • 8747

ajax跨域请求,服务端session丢失的解决方法

为什么跨域请求的时候session会丢失? 关键先认识一下XMLHttpRequest.withCredentials属性。 引用MDN: XMLHttpRequest.withCre...
  • mangoyiy
  • mangoyiy
  • 2018-04-03 10:24:11
  • 10

解决ajax返回innerHTML中javascript不能运行问题

 在实际应用的过程中,我们经常会遇到使用ajax返回某一个网页的内容到模版页面的某一个标签中显示的操作。如果返回的值仅仅是文本类数据不会影响模版页面的功能,但是如果返回的数据包括javascript,...
  • yehell
  • yehell
  • 2008-03-31 10:48:00
  • 7599

JS中如何处理多个ajax并发请求?

js中的多并发处理。 通常 为了减少页面加载时间,先把核心内容显示处理,页面加载完成后再发送ajax请求获取其他数据 这时就可能产生多个ajax请求,为了用户体验,最好是发送并行请求,这就产生...
  • yintianqin
  • yintianqin
  • 2017-03-09 16:08:51
  • 7150
    个人资料
    持之以恒
    等级:
    访问量: 1924
    积分: 476
    排名: 10万+
    文章存档
    最新评论