【问题标题】:Refresh currently selected tab on Ajax success在 Ajax 成功时刷新当前选定的选项卡
【发布时间】:2014-08-08 01:24:24
【问题描述】:

我有几个选项卡,从数据库填充。每个选项卡都包含一个部分视图,也是从数据库中填充的。当有人向这些部分代表的集合之一添加某些内容时,我希望它刷新选项卡内容,以反映更改。

function addNewRequest(arForm) {
    username = $(".ui-tabs-selected").attr("id");
    currentUser = document.getElementById("currUser").value;
    $.ajax({
        url: 'Home/submitAdvisoryRequestForm',
        type: 'POST',
        data: arForm.serialize() + "&username=" + username + "&currUser=" + currentUser,
        success: function (response) {
            if (response == "true") {
                $("#users").tabs("load", $('#users .ui-tabs-panel:not(.ui-tabs-hide)').index() - 1);
                dialog.dialog("close");
            } else {
                alert(response);
            }
        },
        error: function (xhr, ajaxOptions, thrownError) { alert(xhr.status); alert(thrownError); }
    });

}

所以据我了解,如果 ajax 调用成功,它会尝试在当前选定的索引处加载选项卡。我已经看过用于抓取所选标签索引的表达式,据我所知,它可以工作,即使可能有点 hacky。

应该刷新标签的代码$("#users").tabs("load", $('#users .ui-tabs-panel:not(.ui-tabs-hide)').index() - 1); 什么都不做。有谁知道为什么?

【问题讨论】:

  • 我很确定这不是问题
  • 请显示您的 HTML。 & 你的代码初始化选项卡。
  • 我最初的想法是你的url 应该是./Home.../Home... 而不是Home... 我认为你不需要在索引上使用-1
  • URL 工作正常,只是 JQuery 中的 'load' 方法不起作用。如果没有-1,它会返回一个不是从零开始的索引,这不是很有用:) 澄清一下,我可以让 AJAX 函数成功返回,我只是无法刷新选项卡内容。跨度>
  • 为什么这个语句末尾的大括号:$("#users").tabs("load", $('#users .ui-tabs-panel:not(.ui-tabs-hide)').index() - 1});?

标签: jquery ajax asp.net-mvc tabs jquery-1.8


【解决方案1】:

F**kadoodle-doo,我想通了。因为 JQueryUI 很蹩脚,只让你刷新 AJAX 加载的内容,所以只替换当前选定选项卡的 div 的 HTML 会更容易。

JQuery 代码:

function addNewRequest(arForm) {
    username = $(".ui-tabs-selected").attr("id");
    currentUser = document.getElementById("currUser").value;
    $.ajax({
        url: 'Home/submitAdvisoryRequestForm',
        type: 'POST',
        data: arForm.serialize() + "&username=" + username + "&currUser=" + currentUser,
        success: function (response) {
            if (response) {
                $('#users .ui-tabs-panel:not(.ui-tabs-hide)').html(response);
                dialog.dialog("close");
            } else {
                alert(response);
            }
        },
        error: function (xhr, ajaxOptions, thrownError) { alert(xhr.status); alert(thrownError); }
    });
}

作为回应,将部分视图扔给它。

public ActionResult submitAdvisoryRequestForm(BCRTAdvisoryRequest newRequest, string username, string currUser)
{
    if (ModelState.IsValid)
    {
        var ar = new AdvisoryRequestsLogic();
        if (ar.addAdvisoryRequest(newRequest) > 0)
            return PartialView("_userAdvisoryRequests", ar.getUserAdvisoryRequests(username));
    }
    return null;
}

【讨论】:

  • 哈!很高兴你把它分类了!令人惊讶的是,您现在显示的代码可能应该在问题中?!顺便说一句,jQueryUI 远非蹩脚,因为您正在使用它的(开源)事实,至少在某种程度上证明了自己是正确的!不过我不同意你的回答。 jQuery 本身(它是 jQueryUI 的基础)使您能够将内容加载到您选择的 any 元素中。 api.jquery.com/load
  • 啊,你是说控制器代码?我认为这并不重要,只要您知道我将部分视图作为选项卡的内容返回即可。此外,.html() 与 .load() 是否不同?也许我应该把它改成“JQuery 1.8 is lame”哈哈
  • 是的,.html() 设置 html 而.load() 从 URL 加载它。
猜你喜欢
  • 1970-01-01
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多