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

  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的情况下实现延迟

最佳答案

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

关于javascript - Ajax(代码)块之后的代码需要延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12404247/

10-09 18:12
查看更多