ajax(代码)块之后的代码需要延迟

时间:2012-09-13 10:29:45

标签: javascript jquery ajax datatables

我有一个很长的问题以及我的完整代码,但现在它更短了。

  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();(来自datatables.net的jquery插件进行分页),那么代码可以正常工作而不会发出警报。

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

的情况下实现此目的

2 个答案:

答案 0 :(得分: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');
      //
    }

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