Javascript 在存在警报函数的情况下启动回调,并且在没有警报的情况下不会启动回调?

Javascript 在存在警报函数的情况下启动回调,并且在没有警报的情况下不会启动回调?,javascript,jquery,Javascript,Jquery,当警报函数出现时(如下所示),回调函数将被触发,一切正常。当警报函数不存在时,回调函数永远不会被触发 function getTableData(tableName, startRow, endRow, callback) { CK.getData = $.getJSON("getTableData.php",{tN: tableName, sR: startRow, eR: endRow}, function(dataTable){}); alert("test");

当警报函数出现时(如下所示),回调函数将被触发,一切正常。当警报函数不存在时,回调函数永远不会被触发

  function getTableData(tableName, startRow, endRow, callback)
  {
    CK.getData = $.getJSON("getTableData.php",{tN: tableName, sR: startRow, eR: endRow}, function(dataTable){});

    alert("test"); 
    CK.getData.done(function()
    {
       // load data inside table using an $.each function...
       callback(); // works only when the alert function above is present..
    });
  }

   getTableData(tableName, startRow, endRow, function()
   {
      $(".logTable").after($addRowData); 
   });

问题在于ajax函数是非阻塞(异步)的,这意味着每个循环都会继续,而不等待响应。当您从任何getJSON调用获得响应时,您已经完成了迭代

我将ajax函数包装在一个闭包中:

  (function(tableName, startRow, endRow)
  { 
      getTableData(tableName, startRow, endRow, function()
      {
        $(".logTable").after($addRowData); 
      });

  })(tableName, startRow, endRow);

并将$.ajax对象中的异步变量设置为false以进行同步。沟通

这是因为
$.getJSON
是异步的。当您添加
警报时,您会给异步调用一个完成时间。