使用AJAX注入javascript和HTML

时间:2010-09-14 14:49:26

标签: javascript ajax asp.net-ajax

首先,我想说,虽然这是我第一次在这里发布这些主板对我有所帮助。 话虽如此,我有一个关于AJAX和脚本的奇怪问题。

你看,在我的网络应用程序中我使用了custome JS上下文菜单。现在,每个菜单都使用特定功能实现,具体取决于对象和对象是否存在。

E.x:如果我们有一个上层菜单占位符但没有上层菜单,上下文菜单将有一个选项,即“添加菜单”。 但是说我们已经有了上层菜单,上下文菜单会有不同的选项,如“编辑菜单”等......

到目前为止这么好,但是,说我们有一个上层菜单占位符而没有菜单然后我们添加了菜单(仍然没有刷新页面)我需要生成一个新的上下文菜单并注入它吗?所以我和我刚刚建立的新菜单一样。

所有代码都进入了SAME div,其中旧的上下文菜单脚本和上层菜单占位符是如此基本,它们被覆盖。 现在菜单本身是HTML格式,因此它会覆盖当前代码,但是JS表现得很糟糕,现在会显示2个上下文菜单,旧的和新的上下菜单,即使我覆盖它的代码。

我需要一些如何在不刷新页面的情况下摆脱旧的上下文菜单脚本。 有什么想法吗?

P.S 所有JS都是动态生成的,如果这有任何区别(我不认为它。)

3 个答案:

答案 0 :(得分:1)

无论有人说什么,都不要使用EVAL。这是邪恶的,如果在页面上使用多次,会给你内存问题。

请在此处查看我的解决方案:trying to call js code that is passed back from ajax call

基本上,创建一个ID为“codeHolder”的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代码字符串放置的所有以前的JS代码。

答案 1 :(得分:1)

在经历了一些突破之后我发现了... (问题不是解决方案)这是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。

生病,让大家知道这是否有效。 欢呼并感谢这些论坛摇滚的建议。

答案 2 :(得分:0)

感谢您的回复。

Dutchie - 这正是我的所作所为。现在问题是HTML被正确覆盖了(我没有使用追加我覆盖整个div)是的javascript只是继续缓存......

我试图禁用浏览器缓存但仍然存在问题我每个项目获得多个上下文菜单我运行的ajax函数越多......

一月, 我的AJAX函数构建了div标签和脚本标签,并将它们放入页面中的另一个容器div标签。

假设发生的是,每次AJAX运行时,容器div中的代码都会被覆盖,并且您将获得更新版本。 容器div中的div被覆盖但是脚本标签以某种方式被缓存到内存中,现在每次out jQuery函数调用上下文菜单我都会得到多个菜单......

我认为不需要代码,但我明天会发布。

有什么想法吗?