[英]Injecting javascript and HTML using AJAX
首先,我想说的是,虽然这是我第一次在这里发布,但这些委员会对我有很大帮助。 话虽如此,我在AJAX和脚本方面遇到了一个奇怪的问题。
您会看到,在我的Web应用程序中,我使用了自定义JS上下文菜单。 现在,每个菜单都具有特定功能,具体取决于对象以及对象是否存在。
例如:如果我们有一个上层菜单占位符,但没有上层菜单,则上下文菜单将有一个选项,即“添加菜单”。 但是说我们已经有了上层菜单,上下文菜单将具有不同的选项,例如“编辑菜单”等。
到目前为止,很好,但是,说我们有一个上级菜单占位符,没有菜单,然后我们添加了菜单(页面上仍然没有刷新),我需要生成一个新的上下文菜单并注入它吗? 因此,我将与刚刚构建的新菜单一起执行此操作。
所有这些代码都进入了SAME div,其中旧的上下文菜单脚本和上层菜单占位符基本上被覆盖了。 现在,菜单本身是HTML格式,因此它覆盖了JS的当前代码,但是作用却更奇怪,即使我覆盖了它的代码,现在也将显示2个上下文菜单,旧菜单和新菜单。
我需要一些如何在不刷新页面的情况下摆脱旧的上下文菜单脚本的问题。 有任何想法吗?
PS如果有任何区别(我不认为这样做),则会动态生成所有JS。
无论任何人说什么,都不要使用EVAL。 这是邪恶的,如果在页面上使用多次,将给您带来内存问题。
在这里查看我的解决方案: 尝试调用从ajax调用传回的js代码
基本上,创建一个ID为“ codeHolder”和voila的div。 基本上,您将需要将HTML和JS传递回AJAX接收器(由分隔符分隔),在JS端进行解析,显示HTML并将JS代码放入javascriptCode变量中。
//Somehow, get your HTML Code and JS Code into strings
var javascriptCode="function test(){.....}";
var htmlCode="<html>....</html>";
//HTML /////////////////////////////////////////
//Locate our HTML holder Div
var wndw=document.getElementById("display");
//Update visible HTML
wndw.innerHTML = htmlCode;
//Javascript ///////////////////////////////////
//Create a JSON Object to hold the new JS Code
var JSONCode=document.createElement("script");
JSONCode.setAttribute("type","text/javascript");
//Feed the JS Code string to the JSON Object
JSONCode.text=javascriptCode;
//Locate our code holder Div
var cell=document.getElementById("codeHolder");
//Remove all previous JS Code
if ( cell.hasChildNodes() )
while ( cell.childNodes.length >= 1 )
cell.removeChild( cell.firstChild );
//Add our new JS Code
cell.appendChild(JSONCode);
//Test Call///////////////////////////////////////
test();
该代码将用新的JS Code String替换您之前放置的所有JS代码。
好吧,在断头之后,我想通了..(问题尚无解决方案)这是ajax函数对吗?
$.ajax({
type: "GET",
url: "../../../Tier1/EditZone/Generate.aspx?Item=contentholder&Script=true",
dataType: "html",
success: function (data) {
$('#CPH_Body_1_content_holder').html(data);
}
});
现在它们的功能使用了一个带有事件处理程序的页面,该事件处理程序按如下方式返回数据:response.write(answer)它使我感到震惊,当您使用response.write时,它将在编译并在我们的示例中运行时发送代码页面Generate.aspx。
因此该脚本将运行,但不会在我希望运行的页面中运行,因此,我无法覆盖该脚本……我真是愚蠢。
我认为这样做会把数据作为实际字符串返回,然后才将代码注入到容器div中。
生病让你们知道那是否可行。 欢呼,感谢您为这些论坛所提供的建议。
谢谢你的回复。
荷兰人-那正是我所做的。 现在的事情是正确地覆盖了HTML(我没有使用append我覆盖了整个div),是的,JavaScript只是继续缓存...
我尝试禁用浏览器缓存,但问题仍然存在,我运行ajax函数的次数越多,每个项目都会得到多个上下文菜单...
Jan,我的AJAX函数构建了一个div标签和脚本标签,并将它们放置在页面中的另一个容器div标签中。
可能发生的情况是,每次AJAX运行时,容器div中的代码都会被覆盖,从而获得更新的版本。 容器div中的div被覆盖,但脚本标签以某种方式被缓存到内存中,现在每次out jQuery函数调用上下文菜单时,我都会获得多个菜单...
我认为不需要代码,但我明天会发布。
有任何想法吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.