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,软件服务网),提供担保交易、源码交易、虚拟商品、任务交易、网站设计、软件设计、站长交易、域名交易、链接交换、网站交易、广告交易、站长培训、建站美工等服务 |