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
是异步的。当您添加警报时,您会给异步调用一个完成时间。