2013-01-16 106 views
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徹底完蛋了。現在它執行的是運行該函數,然後關閉對話框,但該函數需要時間來刷新表。所以當你關閉對話框功能時沒有時間去更新表格。

+0

爲什麼使用'ajax.readyState'而不是成功回調? – Blazemonger

+2

你爲什麼在ajax處理程序中使用document.ready()? –

+0

可能你需要[回調](http://recurial.com/programming/understanding-callback-functions-in-javascript/)。 – antejan

回答

0

一旦refreshTable()方法完成,您只需調用對話框close()方法。如果refreshTable()被調用的非同步方法,那麼你就需要調用對話框的接近方法在非同步方法

@Edit的回調處理程序:改變你的refreshtable()代碼到

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

請問,你能舉一個代碼示例嗎? – user1972864

+0

爲此,您需要提供有關refreshTable()函數的詳細信息 – gurvinder372

+0

我將該函數放在問題文章中! – user1972864

0

你可以將一個回調參數添加到refreshTable函數中,然後在完成時傳遞它希望運行的任何內容。例如:

function refreshTable(callback) 
{ 

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

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

} 

/* ... (AJAX request) */ 

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

這不工作! – user1972864

+0

你的控制檯是否有錯誤?例如,對話框中的某些東西可能不是未定義的方法? – MichaelRushton

+0

我不知道我該怎麼做 – user1972864

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

} 
+0

你可能想在那裏修復'ajax.responseText'。 – MichaelRushton

+0

@MichaelRushton是的。謝謝。 –

相關問題