【问题标题】:JQuery tools :: Unable to load AJAX content in second tabJQuery 工具 :: 无法在第二个选项卡中加载 AJAX 内容
【发布时间】:2014-02-02 03:39:51
【问题描述】:

jQuery 工具 v1.2.7

问题:

目前处理三个选项卡,其内容通过 AJAX 调用加载到 PHP 控制器 (MVC)。

第一个选项卡加载控制器返回的简单 HTML 文件。

第二个选项卡加载两个不同的文件,由并行 AJAX 调用(左面板和右面板)调用。这里一切正常。

第三个选项卡的作用几乎相同,但问题是 右侧面板会加载,除非重新加载整个页面,然后所有选项卡都可以正常工作

需要注意的是,当我从选项卡 2 切换到 3 时,右侧面板没有显示,然后我返回到上一个选项卡 2,现在应该出现在选项卡 3 上的面板显示在选项卡上2.

我已经完成了我的研究,但一切都指向 JQuery UI,我正在使用工具。我需要一种方法来刷新每次转换的选项卡或避免那种“重叠”。

我已尝试重新设计网站,但问题仍然存在。

如果需要任何代码,请告诉我。

提前致谢。

【问题讨论】:

  • “如果需要任何代码,请告诉我。” 很漂亮。

标签: javascript php jquery html jquery-tools


【解决方案1】:

感谢您对此进行调查:

主页(加载选项卡的位置):

<ul class="css-tabs">
<li><a href="controller1/getOne">1</a></li>
  <li><a href="controller1/getTwo">2</a></li>
  <li><a href="controller2/getThree">3</a></li>
</ul>

<div class="css-panes">
  <div id="dynamic-pane"></div>
  <div id="dynamic-pane"></div>
  <div id="dynamic-pane"></div>
</div>

<!-- activate tabs with JavaScript -->
<script>
    $(function() {
      $("ul.css-tabs").tabs("div.css-panes > div.#dynamic-pane", {
      history: true,
      effect: 'fade',
      onBeforeClick: function(event, i) {
        var pane = this.getPanes().eq(i);
        pane.load(this.getTabs().eq(i).attr("href"));
      }

  });
});
</script>

第二个选项卡通过 JQuery 工具的“href”方法从 controller2 加载内容。然后,这样的内容是一个带有 JS 的 HTML 文件,它会进行另一个 AJAX 调用:

<script src="../js/secondTab.js"></script>

<script>$(document).ready(function() { showLeftPanel(); showRightPanel(); }); </script>

<div id="dynamic-content-left"> </div>

<div id="dynamic-content-right"> </div>

JS 脚本包含如下内容:

function showLeftPanel(){
    $.ajax({
        type: "POST",
        url: "controller2/showLeftPanel",
        contentType: "html",
        success: function(response) {
            $("#dynamic-content-left").html(response);
        }
    });
};

function showRightPanel(){
    $.ajax({
        type: "POST",
        url: "controller2/showRightPanel",
        contentType: "html",
        success: function(response) {
            $("#dynamic-content-right").html(response);
        }
    });
};

之所以这样,是因为这个项目有smarty,使用render()方法返回“一段HTML代码”来完成页面。

这里一切正常,但是当我转到第三个选项卡时,只显示左侧面板,我必须重新加载页面才能修复它,例如,右侧面板显示

我认为这个问题可能与选项卡加载内容的方式以及 AJAX 没有在第二个选项卡中加载内容有关,因为它 "$(document).ready(function({});" 是已经在上一个选项卡(选项卡 2)中加载。一旦我重新加载页面,文档就会刷新,然后执行一个新的 AJAX 调用。

希望这是有道理的。

P.S 相同的过程适用于第三个选项卡,相同的脚本结构。改变的是 HTML 文件的内容(网页内容)。

【讨论】:

  • 好的,我把它修好了。我为每个“面板”添加了一个不同的类,并为每个元素添加了唯一 ID,从而解决了加载正确“面板”的问题。但是,点击事件触发的AJAX功能并没有被触发...
【解决方案2】:

我解决了这个问题。

总结:

  • 为每个 div 使用唯一 ID。
  • 为每个 HTML 输入使用唯一 ID,因为 AJAX 没有获得正确的值。

现在这个实现似乎一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    相关资源
    最近更新 更多