【问题标题】:How to execute a command after an AJAX call?如何在 AJAX 调用后执行命令?
【发布时间】:2010-01-15 07:08:24
【问题描述】:

我写了这个脚本:

$.getJSON('<%=Url.Action("JsonSave","Controler")%>', {
    id: newRow.Id,
    personId: newRow.PesronId},
    function(data) {
        $('#grid').trigger('reloadGrid'); //{0}
        $('#grid').editRow(rowCount); //{1}
    })
})

我应该怎么做才能在 {0} 之后执行 {1}

【问题讨论】:

  • 不是按这个顺序执行的吗?
  • 不,不是。我猜触发器是异步的
  • @CoffeCode,希望我没有让你白跑一趟。我做了一些研究并用它更新了我的答案。

标签: javascript jquery asp.net-mvc jqgrid


【解决方案1】:

答案已更新我做了一些研究,看来您正在使用jQuery Grid plugin。它有一个名为gridComplete 的回调,应该可以满足您的需求。将其与我使用one 的原始答案结合起来,您将万事俱备:

由于事件是按顺序调用的,您可以像这样将您的方法添加到事件队列中:

$.getJSON('<%=Url.Action("JsonSave","Controler")%>',
        { id: newRow.Id, personId: newRow.PesronId},
         function(data) {
            $('#grid').one('gridComplete', function(){ $('#grid').editRow(rowCount); });
            $('#grid').trigger('reloadGrid');
         })

使用one 而不是bind 会导致您的事件回调仅使用一次。

【讨论】:

  • 感谢更新,我试过了还是没有结果,我真的很困惑
【解决方案2】:

Doug 的回答是对的,只是要使用的事件是loadComplete

jQGrid documentation for events

【讨论】:

  • @Vinodh,从事件列表看来,loadComplete 在 XHR 请求返回之后触发,但在 Grid 更新之前触发。他编辑该行的调用将失败,因为它将在事件结束后更新。 gridComplete 是正确的事件 AFAIK。
  • 在我使用jqGrid的经验中,我一直看到loadCompletegridComplete之后执行。不确定原因。但出于本次讨论的目的,我测试了对editRow 的调用,无论是放在gridComplete 还是loadComplete 事件中,它都有效。
【解决方案3】:

trigger()editRow() 是异步调用吗?如果是这样,你可能会不走运,因为你不知道他们什么时候会被调用。

如果您需要在trigger() 完成后调用editRow(),请在trigger() 函数本身的末尾调用EditRow()

【讨论】:

    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    相关资源
    最近更新 更多