0

我有这个 Ajax 脚本:

if(ajax.readyState==4)
        {
        var respuesta=ajax.responseText;
        document.getElementById('result').innerHTML=ajax.responseText;
        $("#newaircraftdialog").dialog('close');

        $(document).ready(function(){
            refreshTable();
        });

        $("#loadingdialog").dialog('close');
        }

函数刷新表:

function refreshTable(){
    $('#table').load('aircrafts_table.php');

}

我遇到的问题是我希望#loadingdialog在前一个功能refreshTable完全完成时关闭。现在它所做的是运行函数,然后关闭对话框,但函数需要时间来刷新表。所以当你关闭对话框时函数还没有来得及更新表。

4

3 回答 3

0

您可以向该函数添加一个回调参数refreshTable,然后在它完成时传递您希望运行的任何内容。例如:

function refreshTable(callback)
{

  /* ... (refresh table code) */

  if ('function' === typeof callback)
  {
    callback()
  }

}

/* ... (AJAX request) */

refreshTable(function ()
{
  $("#loadingdialog").dialog('close')
}
)
于 2013-01-16T17:22:04.017 回答
0

一旦 refreshTable() 方法完成,您只需调用对话框 close() 方法。如果 refreshTable() 正在调用异步方法,那么您需要在该异步方法的回调处理程序中调用对话框的关闭方法

@Edit:将您的 refreshtable() 代码更改为

function refreshTable(){
    $('#table').load('aircrafts_table.php', function(){
        //put that code to close that dialog box here
    });
}
于 2013-01-16T17:18:44.423 回答
0

这样它应该像你想要的那样做(请参阅答案末尾的更新刷新表):

if(ajax.readyState==4) {
        var respuesta=ajax.responseText;
        document.getElementById('result').innerHTML=ajax.responseText;
        $("#newaircraftdialog").dialog('close');
        refreshTable(function(){$("#loadingdialog").dialog('close');});
}

但我不知道你为什么将 jQuery 与纯 JS 混合(在我看来)。

假设您的代码可以这样更改:

$(document).ready(function() {
     $.ajax({url:ajax_url,
             method:'GET',
             dataType:'html',
             success:function(res){
                 document.getElementById('result').innerHTML=res;
                 $("#newaircraftdialog").dialog('close');
                 refreshTable(function(){$("#loadingdialog").dialog('close');});

             });
     });

请注意,$(document).ready(function() {})仅在文档完全加载后调用一次。ajax 完成后不会再次调用它。

function refreshTable(callback){
    $('#table').load('aircrafts_table.php', callback);

}
于 2013-01-16T17:29:55.473 回答