2012-09-13 27 views
0

我有一個很長的問題,隨着我的完整代碼,但現在它是較短的一個。ajax(代碼)塊之後的代碼需要延遲

function showRecord(tbl) { 
    myDataTable.fnDestroy(); 
    $.ajax(
    { 
     data: "tableName=" + tbl, 
     url: "showTable.php", 
     dataType: "html", 
     success: function (data) { $("#example").html(data); } 
    }); 
    alert('I get desired output as long as I do not comment/remove this alert'); 
    myDataTable = $('#example').dataTable(); 
} 

,如果我只是發表意見alert我不從數據庫中獲得

數據如果我不使用$('#example').dataTable();(用於分頁jQuery插件從datatables.net)然後代碼工作正常,沒有警報。

function showRecord(tbl) { 
    //myDataTable.fnDestroy(); 
    $.ajax(
    { 
     data: "tableName=" + tbl, 
     url: "showTable.php", 
     dataType: "html", 
     success: function (data) { $("#example").html(data); } 
    }); 
    //alert('I get desired output as long as I do not comment/remove this alert'); 
    //myDataTable = $('#example').dataTable(); 
} 

我需要知道爲什麼alert在第一個代碼示例中是必需的。如果它造成延遲,爲什麼延遲是必要的,以及如何在不使用alert

+0

'alert'會產生延遲。嘗試使用'console.log()'來代替登錄。 – PiTheNumber

+0

謝謝我的確如此。但是,如何在線顯示行警語言的同時做一些其他的事情呢? – Sami

+0

沒有它沒有工作。但是,靜音替代警報可以成爲解決方案 – Sami

回答

1

Ajax調用是異步的。在第一個代碼塊(如果沒有alert)Ajax調用得到執行,然後之後立即(服務器響應之前)這行執行:

myDataTable = $('#example').dataTable(); 

而且由於服務器沒有返回結果尚未$('#example')是空的。你可以這樣說:

function showRecord(tbl) { 
    myDataTable.fnDestroy(); 
    $.ajax(
    { 
     data: "tableName=" + tbl, 
     url: "showTable.php", 
     dataType: "html", 
     success: function (data) { 
      $("#example").html(data); 
      myDataTable = $('#example').dataTable(); 
     } 
    }); 
} 
+0

好的答案。問題已經由@ek_ny解決了,謝謝他。但是你在別人之前回答完全如此歡呼:) – Sami

1

試試這個。

function showRecord(tbl) { 

     //myDataTable.fnDestroy(); 
     $.ajax(
     { 
      data: "tableName=" + tbl, 
      url: "showTable.php", 
      dataType: "html", 
      success: function (data) { 
       $("#example").html(data); 
       myDataTable = $('#example').dataTable(); } 
     }); 
     //alert('I get desired output as long as I do not comment/remove this alert'); 
     // 
    } 
+0

好吧,讓我試試吧 – Sami