2KB项目,专业的源码交易网站 帮助 收藏 每日签到

解决Ajax返回Script代码不能执行的问题

  • 时间:2019-12-17 04:43 编辑:Ciarán Hancock 来源:2KB项目 阅读:675
  • 扫一扫,手机访问
  • 分享
摘要:Ajax很方便,提升了交互体验,但是也有不足,就是ajax请求得到的数据中如果包含脚本代码,比如说请求得到的是一块html内容,我们把这块html内容插入到网页中的某个地方,但是其中明明存在的脚本却不能得以运行定义一个函数exeScript(html

Ajax很方便,提升了交互体验,但是也有不足,就是ajax请求得到的数据中如果包含脚本代码,比如说请求得到的是一块html内容,我们把这块html内容插入到网页中的某个地方,但是其中明明存在的脚本却不能得以运行


定义一个函数exeScript(html)可以解决Ajax返回Js Script代码不能执行的问题,只需要Ajax返回的数据再调用一下


<script>
    $("#buy2KBbtn").on('click', function() {
        var baidusearchlimitcount = $("#buysomeinput").val();
        var price = 10*baidusearchlimitcount;
        $.ajax({
                url: 'https://www.2kb.com/webhelper.php?id=<?=$id?>&control=test',     
                type: 'POST',                //获取数据方式:post/get           
                async: true,                //加载方式默认异步true
                data: { 'baidusearchlimitcount':baidusearchlimitcount},
                //data: limitcount,
                beforeSend: function(){
                },            //数据格式
            success:function(data){
            console.log(data);
            // ajax不解析js,需用以下方法执行
            exeScript(data);
            },
            error: function(obj){
            console.log("commitall return error:"+JSON.stringify(obj));
            }, 
        });
    });
    
    
    function exeScript(html){
       var reg = /<script[^>]*>([^x00]*)$/i;
       var htmlBlock = html.split("</script>");
       var blocks,srcBlock,script;
       var scriptContent=document.getElementById("script")||document.body;
       for (var i in htmlBlock){ 
         if (blocks = htmlBlock[i].match(reg)){ 
           var matchAll=blocks[0];
           var srcReg=/src=['"](.*?)['"]/i;
           if(srcBlock=matchAll.match(srcReg)){
              script=document.createElement("script");
              script.src=srcBlock[1];
              scriptContent.appendChild(script);
           }else{
              var code = blocks[1].replace(/<!--/, '');
              try{
                eval(code)
              }
              catch (e){
                 console.log(e);
              }
           } 
         }
       }
    }
</script>

从请求的数据中通过正则匹配查找script标签并把它们都分离出来,然后判断是什么形式的script标签,如果有src的就把src地址通过正则匹配出来,然后创建一个新的script标签插到网页中。否则通过evel直接执行script里面的代码。


2KB项目(www.2kb.com,软件服务网),提供担保交易、源码交易、虚拟商品、任务交易、网站设计、软件设计、站长交易、域名交易、链接交换、网站交易、广告交易、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部