完成时继续

时间:2013-01-16 17:13:27

标签: jquery ajax

我有这个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');
        }

函数refreshTable:

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

}

我遇到的问题是,当前一个函数#loadingdialog完全结束时,我希望refreshTable关闭。现在它做的是运行该函数,然后关闭对话框,但该函数需要时间来刷新表。因此,当您关闭对话框时,函数没有时间更新表。

3 个答案:

答案 0 :(得分:0)

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

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

function refreshTable(){
    $('#table').load('aircrafts_table.php', function(){
        //put that code to close that dialog box here
    });
}

答案 1 :(得分:0)

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

function refreshTable(callback)
{

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

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

}

/* ... (AJAX request) */

refreshTable(function ()
{
  $("#loadingdialog").dialog('close')
}
)

答案 2 :(得分: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);

}