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');
        }

関数 refreshTable:

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

}

#loadingdialog私が抱えている問題は、前の機能refreshTableが完全に終了したときに閉じたいということです。ここで、関数を実行してからダイアログを閉じますが、関数はテーブルを更新するのに時間が必要です。したがって、ダイアログ関数を閉じると、テーブルを更新する時間がありません。

4

3 に答える 3

0

refreshTable() メソッドが終了したら、ダイアログの close() メソッドを呼び出すだけです。refreshTable() が非同期メソッドを呼び出している場合、その非同期メソッドのコールバック ハンドラでダイアログの close メソッドを呼び出す必要があります。

@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

関数にコールバック パラメータを追加し、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

このようにして、あなたが望むようにする必要があります(回答の最後にある更新された更新表を参照してください):

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 に答える