【问题标题】:reload javascript in a page once the content in the div is changed更改 div 中的内容后,在页面中重新加载 javascript
【发布时间】:2014-01-15 11:59:20
【问题描述】:

这就是我的应用程序的工作方式。

我有一个导航栏,一旦我单击导航栏中的链接,页面的一个特定部分 (div) 将更改其内容 (ajax)。大部分内容是图形和表格,并使用 css 和 javascript。问题是,每当我单击链接时,都不会显示/使用 js 的效果。我认为每次更改 div 的内容时都应该重新加载 js。我该怎么做?

这是脚本。

<script>
    function loadTable(logtype)
    {
        var xmlhttp;
        if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
        else
        {// code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            {
                document.getElementById("tables").innerHTML=xmlhttp.responseText;
                }
        }

        if (logtype == "XXX")
        {
            xmlhttp.open("GET","/con/chartUI",true);
        }

        xmlhttp.send();



    }
</script>  

html/导航部分 (tables 是应该显示 na 图表和图形的 div 的 id)

<div class="nav-collapse sidebar-nav">
                            <ul class="nav nav-tabs nav-stacked main-menu">
                                <li>
                                    <a class="dropmenu" href="#"> <font color="#6666FF">System</font> </a>
                                    <ul>
                                        <li><a class="submenu" href="#"><h2>&nbsp;&nbsp;&nbsp;&nbsp;Monitoring</h2></a></li>
                                    </ul>    
                                </li>
                                <li>
                                    <a class="dropmenu" href="#"><font color="#6666FF">Maintenance</font></a>
                                    <ul>
                                        <li>
                                            <a class="dropmenu" href="#"><h2>&nbsp;&nbsp;&nbsp;&nbsp;Logs</h2></a>
                                            <ul>
                                                <ul><a class="submenu" href="#" onClick="loadTable('XXX')"><h3>Option 1</h3></a></ul>
                                                <ul><a class="submenu" href="#" onClick="loadTable('XXX')"><h3>Option 2</h3></a></ul>
                                                <ul><a class="submenu" href="#" onClick="loadTable('XXX')"><h3>Option 3</h3></a></ul>
                                                <ul><a class="submenu" href="#" onClick="loadTable('XXX')"><h3>Option 4</h3></a></ul>
                                            </ul>
                                        </li>
                                    </ul>    
                                </li>
                            </ul>
                        </div>

【问题讨论】:

    标签: javascript jquery html ajax


    【解决方案1】:

    您可以在更新 DIV 内容后使用window.location.reload();

    编辑:

    如果您使用 Javascript/JQuery(AJAX) 更新您的 DIV 内容,则无需重新加载页面。我希望您的最终要求可能是更新 DIV 内容。

    例如:

    $("#YOUR_DIV_ID").html("您的内容...");

    【讨论】:

    • 是的,目标是更新 div 内容。但是 div 的内容包含表格标签,并且该表格需要来自导入的 js 文件的 js 函数。来自服务器的内容由于某种原因无法访问那些 js 文件,我想知道为什么?我该如何解决?
    • 您可以使用 html 元素添加/附加您的内容
    • 这可以运行一些我需要的 js 文件,有些仍然无法工作。您还有什么其他建议或建议吗?
    • AKumarthis 能够运行我需要的一些文件,但有些仍然无法运行。我认为是因为 $document.ready();根据我所阅读的内容, document.ready 所做的是在 DOM 完成加载后执行该语句。我能做些什么来解决这个问题?谢谢
    • 你很有帮助。这 $("#YOUR_DIV_ID").html("您的内容...");解决了我的部分问题。 :)
    【解决方案2】:

    如果您只想在检索到内容后调用一些 javascript 函数,请使用

      xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            // play with xmlhttp.responseText; 
            then call your javascript functions here
        }}
    

    【讨论】:

      【解决方案3】:

      因为您的 div 将通过 Ajax 调用进行更新。我认为您可以在完成对 div 内容的操作后,在 ajax 调用的回调中重新加载 javascript。

      //reload script
      var script = document.querySelectorAll('script[src=blabla.js]')[0]
      script.parentNode.removeChild(script);
      
      script = document.createElement('script');
      script.type='text/javascript';
      script.src='blabla.js';
      
      document.head.appendChild(script);
      

      【讨论】:

      • 这个脚本会刷新整个文档吗?
      • 我说的对吗,这段代码的作用是用脚本删除所有标签,然后创建另一个与您删除的脚本相同的脚本,将其附加到文档中,对吗?因为我要处理 20 多个 js 标签,我不确定这是否有效。无论如何谢谢:)
      • 不会删除所有脚本文件,只删除src为'blabla.js'的脚本文件
      • 如果要重新加载名为 my.js 的 js,只需将 blabla.js 替换为 my.js,代码只会重新加载特定的一个脚本文件,不会更改任何其他 javascript 文件
      【解决方案4】:

      您是否尝试过使用 console.log() 进行调试?请求是否真正被发送(Chrome 的网络标签非常适合监控)?

      我对您的代码结构感到有些困惑。 responseText 仅针对 IE5 和 6 进行处理,并且您尝试在发送请求之前执行此操作。这是来自 MDN 的an example usage。 reqListener 回调是动作发生的地方。

      function reqListener () {
        console.log(this.responseText);
      }
      
      var oReq = new XMLHttpRequest();
      oReq.onload = reqListener;
      oReq.open("get", "yourFile.txt", true);
      oReq.send();
      

      除非必须支持 IE5,否则我建议尝试支持 IE6+ 的jQuery AJAX

      【讨论】:

      • 在原生 javascript 中使用这种方式的 ajax 调用很好,在发送请求之前不处理 responseText。这不是程序流程,它检查响应的状态,然后使用 responseText。参考stackoverflow.com/questions/8567114/…
      • 你指的是原始代码吗?您可以在此处看到它没有响应:jsfiddle.net/Yh8j6 responseText 应该在回调中处理,这可以通过将 responseText 代码移出 IE5/6 块并将其放入 onload 处理程序中来完成,如上面的 MDN 示例:jsfiddle.net/edzte(应该显示 404 错误)。
      • 我刚刚意识到您基本上在上面发布了相同的内容。我认为您的回答应该很容易解决这个问题,所以我投了赞成票。
      • 我指的是我发布的答案,可能会在很短的时间内添加,这就是为什么混淆:) 感谢您的支持..
      • @Jimeux 是的,我尝试在 mozilla 中调试检查元素。当我刷新页面时,它会调用(获取)所有的 javascript。当我单击某些内容来更改其中一个 div 的内容时,它只会从服务器调用(获取)它需要的内容,这就是为什么在客户端中无法看到图形的原因。您认为您在上面发布的代码可以做到这一点吗?谢谢你:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      相关资源
      最近更新 更多