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

实战指南:从零开始用YOLOv8训练VisDrone无人机检测模型 本文提供了一份详细的实战指南,手把手教你从零开始使用YOLOv8训练一个无人机检测模型。内容涵盖VisDrone数据集下载与格式转换、YAML配置文件编写、模型训练与评估,以及最终的推理部署,旨在帮助开发者快速掌握无人机视角下的目标检测技术。 阅读详情

 在实际应用的过程中,我们经常会遇到使用ajax返回某一个网页的内容到模版页面的某一个<div>标签中显示的操作。如果返回的值仅仅是文本类数据不会影响模版页面的功能,但是如果返回的数据包括javascript,那么直接innerHTML到模版页的这段脚本是不会被运行的。原因在于浏览器只在显示模版时才解析javascript,而使用ajax返回的js是被后期倒入的并没有被解析,所以调用的时候找不到对应的function()。

想要解决这个问题,最基本的方法就是需要让浏览器可以同时解析<div>标签中的js。如果单适用IE浏览器,最简单的方式就是在<div>中的<script>标签中添加属性defer,它可以通知IE该脚本需要异步解析。但是令人头痛的是Firfox的标准总是和IE有着各种各样的不同,由于FF不支持defer所以使得开发者不得不另辟蹊径来解决这个问题。

实际上,我们可以在ajax返回数据并innerHTML到模版之前先把<div>中的javascript取出并写到模版页面的<head>中让浏览器解析。这样就相当于在打开模版页面的同时加载了所有<div>标签需要的javascript。奇怪的是这些脚本必须添加在<head>标签中FF才能有效,如果有人知道原因希望可以指点偶一下。

实现方法举例:

function get_div_content(divid){
        
        
var xmlHttp = GetXmlHttpObject();
        
var url = "http://" + document.location.host + "/divpage.jsp?id="+divid+"&random="+Math.random();
        
var div_content_id = "drag_content_"+divid;
        
var xmlHttp=GetXmlHttpObject();
            
if (xmlHttp==null)
            
{
                alert (
"AJAX初期化失敗!");
                
return;
            }

            xmlHttp.onreadystatechange
=function(){
               
                
if(xmlHttp.readyState < 4){
                    document.getElementById(div_content_id).innerHTML
="Loading...";
                }
    
                
if(xmlHttp.readyState==4){
                    //用正则表达式匹配ajax返回的text中是否有onload,如果存在则取出内容。 
                      
var reg_onload = /<body onLoad="([^<]*)">/;
                      
var match_onload=xmlHttp.responseText.match(reg_onload);            
                    //用正则表达式匹配ajax返回的text中是否有<script>,如果存在则取出标签内部的内容。       
                    
var reg = /<script[^>]*>([sS]*)</script>/;
                    
var match=xmlHttp.responseText.match(reg);

                    
var MyScript="";
                    
if(match!=null){
                        MyScript
=match[1];
                        
var script=document.createElement("script");//在模版页创建新的<script>标签
                        script.text
=MyScript;//给新的script标签赋值
                        document.getElementsByTagName(
"head")[0].appendChild(script);//把该标签加入<head>
                        }

                    
var Html=xmlHttp.responseText.replace(reg,"");//将剩下的text祛除<script>部分,插入模版页
                    document.getElementById(div_content_id).innerHTML
=Html;
                       
if(match_onload!=null){
                          eval(match_onload[
1]);//如果存在onload方法,则调用;
                      }

                   }

            }

            xmlHttp.open(
"GET",url,true);
            xmlHttp.send(
null);
    }

test.html

<table>
    
<script type="text/javascript" defer="defer">
     
function test(){alert('测试下,用ajax的话,这段代码也会执行的!');}
    
</script>
    
<tbody>
       
<tr>
          
<td><input onclick="test()" value="click me" type="button"></td>
       
</tr>
     
</tbody>
</table>
OTG原理讲解 摘要:USB OTG(On-The-Go)是USB 2.0的重要功能,允许设备在主机和从机间动态切换,实现设备间的直接通信。其核心机制是通过ID引脚电平判断角色:Micro-USB中接地为Host,悬空为Device;USB-C则通过CC引脚协商。电路设计需处理ID引脚连接和VBUS电源控制,MCU根据ID状态配置USB控制器模式。典型应用包括手机连接U盘、键盘等外设,极大扩展了移动设备的连接能力。 阅读详情

相关推荐

Krylov子空间与Arnoldi过程

一、应用背景 Krylov子空间方法是模型降阶(MOR)的一种,Krylov 子空间方法就是在Krylov子空间中寻找近似解。 二、Krylov子空间 n是原始矩阵的维度,m为降阶后矩阵的维度,通常m<<n。 三、Arnoldi 过程: 计算Km 的一组正交 对应上述MGS过程的python代码: import numpy as np def arnoldi_itera...

保持写作习惯,完成知识沉淀 6001

ajax获取的数据中包含html代码,执行ajax返回数据中包含的script脚本代码

ajax虽然很方便,提升了我们的交互体验,但是它也有可恨之处,就是ajax请求得到的数据中如果包含脚本代码,比如说请求得到的是一块html内容,我们把这块html内容插入到网页中的某个地方,但是其中明明存在的脚本却不能得以运行,如果你听不懂我在说什么,说明你还不懂ajax或者用得少没遇到这种现象。通常来讲,页面中包含的脚本形式无非两种:第一种:var _hmt = _hmt || [];(func...

weixin_34028581的博客 621

ADS1231驱动开发:24位高精度ADC嵌入式实现指南

24位Δ-Σ型ADC是高精度传感器信号采集的核心器件,其原理基于过采样与数字滤波实现远超奈奎斯特极限的分辨率。技术价值在于以低成本硬件达成微伏级信号分辨能力,显著提升称重、压力、力等桥式传感器系统的动态范围与温漂稳定性。典型应用场景涵盖电子秤、工业变送器及材料测试设备等对线性度、零点漂移和抗工频干扰(50/60Hz)有严苛要求的领域。本文围绕ADS1231这一面向惠斯通电桥优化的专用ADC,深入解析其串行同步时序驱动、PGA增益配置、参考电压匹配及FreeRTOS多任务安全集成等关键工程实践。

weixin_34268462的博客 624

jquery用ajax请求,返回带脚本的html附加到页面,返回的脚本无法执行

jQuery.parseHTML()不会运行解析的HTML中的脚本,除非你明确将参数keepScripts指定为true。不过,大多数环境仍然可以间接地执行脚本,例如:通过属性。出于未来的兼容性考虑,当参数keepScripts被省略或为false时,调用者应该不依赖任何运行脚 本内容的能力。原因是 $(xx).html() 不解释脚本,要用 parseHTML函数指定要执行脚本的参数或自己触发脚本执行。在写jquery经常会返回带脚本的内容,但里面的脚本会有莫名奇妙的问题,例如像下面的。...

qq824756152的博客 490

智警杯1.4---excel可视化

知识点

lulu001128的博客 949

解决‘GLIBC_2.28 not found‘错误:手把手教你升级glibc到最新版(附中文乱码修复)

本文提供了一份详尽的Linux系统glibc升级实战指南,旨在解决常见的'GLIBC_2.28 not found'错误。文章不仅涵盖从风险评估、环境准备到编译安装的完整流程,还特别加入了精简本地化数据以修复中文乱码的实用技巧,帮助管理员和开发者在安全可控的前提下完成系统核心库的升级。

a1b2c3d的博客 1342

执行AJAX返回HTML片段中的JavaScript脚本

如果AJAX加载的数据是一个HTML片段,而且这个HTML片段还包含脚本块,那么在你把这数据xmlHttp.responseText用innerHTML方法插入到当前文档一个元素中,你会发现AJAX加载回来的脚本根本没有执行。这是AJAX开发中很常见的问题,如果你不是一直在用JavaScript框架做开发,相信你早就发现这个问题了。本文分析了两个解决办法,其中一个是讲解jQuery框架的实现。

3630

我装了10个ClawHub技能,这些最好用!

ClawHub就是Clawdbot的"应用商店"。Clawdbot是手机ClawHub是App Store技能就是各种App装了技能,Clawdbot才能干更多事。这个技能解决了我的信息过载问题。为什么装我订阅了很多Newsletter。每天收到一堆长文章,根本看不完。怎么用“总结这篇文章的核心观点”“把这个Newsletter提炼成3个要点”“这篇技术博客有哪些可以实践的建议?安装命令真实体验现在我收到长文章,直接转发给Clawdbot。它会提炼出核心要点和行动清单。

Maynor的博客 6099

处理ajax返回页面代码中的script

处理ajax返回页面代码中的script //类似innerHTML,但处理了text中的<script>脚本,并设置id的innerHTML值为去掉script后的html文本//text为ajax调用返回的数据,id为要设置innerHTML的元素idvarsetInnerHTML=function(text,id){v...

weixin_34054866的博客 377

FortiOS 存在身份验证绕过导致命令执行漏洞(CVE-2024-55591)

FortiOS 是 Fortinet 公司开发的操作系统,作为 Fortinet 安全平台的核心,提供全面的网络安全功能。 它将网络和安全功能无缝集成,支持跨本地、云、混合和融合 IT/OT/IoT 基础设施环境的统一管理。 FortiOS 7.6 版本引入了生成式人工智能助手、数据保护、托管服务和单一代理等新功能,进一步增强了其安全性和性能。

缘梦未来的博客 1841

BGP路由聚合:自动聚合和手动聚合

路由聚合是指将多条具体的路由合并为一条聚合路由,以减少路由表的条目数。这种技术通过只向对等体发送聚合后的路由,而不发送所有的具体路由,来减小路由表的规模。同时,被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络的稳定性。

网络技术联盟站 1219

asp ajax返回html代码,使用AJAX解析从ASP页面返回的HTML表格并提取特定单元格

工作Intranet上有一个ASP页面,用于从多个传感器返回数据。数据以表格格式显示,具有多行和多列。使用AJAX解析从ASP页面返回的HTML表格并提取特定单元格我认为这很酷,如果我可以在我们的部门网站上显示一些输出。我想用ajax打开ASP页面,并从结果表中获取一些数据点。用AJAX打开页面非常简单,但我不确定该如何处理它。表的格式如下所示:Data ID 1DescriptionDataDa...

weixin_33439618的博客 330

SNAP计算哨兵2号的LAI/FVC/FAPAR

SNAP的计算LAI方法是基于PROSAIL模型,集成的模块,很方便。首先要下载SNAP软件,下载步骤见。

所有专家都曾始于新手 2505

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

在做 ajax 编程时,我们常常需要将 xmlhttp 获取到的页面内容通过 innerHTML 来赋给某个容器(比如 div、span 或者 td 等),但是这里存在一个问题,就是我们将要赋给 innerHTML 的页面内容如果包含有脚本程序,这些脚本程序不管是外部脚本,还

yymycabbage的专栏 1084

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ajax 后 html onload,解决ajax返回innerHTML中javascript不能运行问题

weixin_39700548的博客 236

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ajax innerHTML中js定义数组识别问题

最近写一个页面,需要在ajax返回的内容中插入一段js,这个段js主要是存储了一个js 数组. ajax返回的内容被赋值给一个div 的innerHTML,本来以为主页面可以直接操作这个js数组了,结果发现完全不认这个数组. 查了一些资料以后发现在innerHTML中的js不

yymycabbage的专栏 1001

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Ajax中动态执行返回到innerHTML中的js

******************************************************************** * 版权声明 * * 本文以Creative Commons的发布,请严格遵循该授权协议。 * 本文首发于博客园, 此声明为本文章中不可或缺的...

aiizumt4059的博客 267

Ajax调用后JS不生效的问题及解决办法

a.jsp通过Ajax调用b.jsp,然后返回b.jsp的内容显示在a.jsp中。现在遇到一个问题,就是在b.jsp中定义了js,在a.jsp中click button并没有调用该js。在firefox中通过Firebug查看源代码。把它保存成html或jsp,js都可以被调用。源代码如下:-----a.jsp----------------------- &lt;%@ page language...

freesky_zh 2384

ajax修改js问题,Ajax调用后JS不生效的问题及解决办法

a.jsp经过Ajax调用b.jsp,而后返回b.jsp的内容显示在a.jsp中。如今遇到一个问题,就是在b.jsp中定义了js,在a.jsp中click button并无调用该js。在firefox中经过Firebug查看源代码。把它保存成html或jsp,js均可以被调用。源代码以下:-----a.jsp-----------------------Get Contentxmlhttp = n...

weixin_42522676的博客 901

ajax 请求返回来的是页面,AJAX返回JavaScript来解析在页面内容

所以我一直在一个脚本来混淆客户端代码保护知识产权,而不与结果页面的交互性的外观干扰最近工作损失结果。过程如下:AJAX返回JavaScript来解析在页面内容HTTP请求时,重定向的.htaccess到parse_request.phpparse_request.php创建它的类变量基本上是$ _ SERVER的副本“phpURLParser”级(*)。变量phpURLParser着眼于请求的路径...

weixin_29000729的博客 944

让Ajax返回的innerHTML中的Javascript代码运行起来

       Ajax返回的字符串,放入某个div的innerHTML中,然后再对此div对象调用getElementsByTagName("SCRIPT")方法,获取一个js的代码数组,然后将此数组的各元素,放入eval()逐个执行即可! 

LAMP随记 679

ajax load innerhtml,ajax中指定innerHTML时如何应用其中的SCRIPT的研究

ajax中指定innerHTML时如何应用其中的SCRIPT的研究更新时间:2007年03月06日 00:00:00 作者:其实这篇文章与ajax无关,但因为是ajax项目中遇到的问题.所以....innerHTML赋值操作时,其中的script并不会被运行,可以使用正则表达式提取script,然后eval(script);示例代码[说明]load1当然可以正常运行load2中Content...

weixin_34707242的博客 194

超标量、超线程与流水线:现代CPU微架构深度解析

理解现代CPU效率引擎,离不开三条核心线索:流水线、超标量与超线程。流水线通过时间重叠让指令吞吐逼近每周期一条,但受限于IPC=1;超标量依靠多发射、乱序执行和寄存器重命名,在单条指令流中挖掘空间并行;超线程则复用空闲执行端口,以低面积成本提升多线程吞吐。三者协同可明显提高服务器和桌面应用的响应能力,但也存在缓存争抢、端口饱和等冲突。通过perf等性能计数器观测IPC与缓存命中率,能够科学评估负载特征并指导SMT开关、绑核等调优实践。从单指令流瓶颈出发,梳理超标量与超线程的设计逻辑、收益边界及实际踩坑,帮助

weixin_34321753的博客 420

JavaScript设置innerHTML时出现“未知的运行时错误”--我也遇上了

在Ajax里经常会通过innerHTML来改变界面,这个比使用DOM要简单一些。 比如: element.innerHTML = "something" 不过,在IE中,有时候会出现"未知的运行时错误(unknown runtime error)",而在firefox里不会。 这主要是IE在对innerHTML进行写操作的时候会检查element是否具备做为这些内容中html对象容

ahqierlian的博客 1284

ajax在ie<select>下不能改变innerhtml值,select innerHTML在IE和FireFox下处理

在前一段时间,做ajax的时候,碰到了这样的问题:=请选择=下面是一个jscript函数function getTypeById(){var obj = document.getElementById('typelist');var result = "";for(var i = 1; i < 6; i++ ){result += ""+i+"" ;}obj.innerHTML = resu...

weixin_28767599的博客 362
上一篇: 如何使div中文本垂直居中
下一篇: Jftp上传文件实例
yehell
博客等级 码龄20年 27粉丝 74原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值