Javascript ajax(代码)块之后的代码需要延迟
我有一个很长的问题和我的完整代码,但现在它是一个较短的问题Javascript ajax(代码)块之后的代码需要延迟,javascript,jquery,ajax,datatables,Javascript,Jquery,Ajax,Datatables,我有一个很长的问题和我的完整代码,但现在它是一个较短的问题 function showRecord(tbl) { myDataTable.fnDestroy(); $.ajax( { data: "tableName=" + tbl, url: "showTable.php", dataType: "html", success: function (data) { $("#example").html(
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();
}
但是如果我只是注释警报
我不会从数据库中获取数据
如果我不使用$('#示例').dataTable()代码>(一个用于分页的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();
}
我需要知道为什么在第一个代码示例中需要警报。如果它导致延迟,为什么这里需要延迟,以及如何在不使用警报的情况下实现这一点
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');
//
}
Ajax调用是异步的。在第一个代码块中(如果没有警报
),执行ajax调用,然后紧接着(在服务器响应之前)执行此行:
myDataTable = $('#example').dataTable();
由于服务器尚未返回结果,$(“#示例”)
为空。你可以这样说:
function showRecord(tbl) {
myDataTable.fnDestroy();
$.ajax(
{
data: "tableName=" + tbl,
url: "showTable.php",
dataType: "html",
success: function (data) {
$("#example").html(data);
myDataTable = $('#example').dataTable();
}
});
}
警报
会造成延迟。请尝试改用console.log()
登录。谢谢。但是,在一种行执行语言中,当显示警报时,怎么可能做其他事情呢?不,它不起作用。是的,alert的静默替代方案是一种解决方案。当您使用AJAX时,只要看到alert-window,请求就会继续。当浏览器加载页面时,Javascript会逐行执行,但浏览器会并行执行很多事情。整个网络流量是并行加载的。所以AJAX可能是个问题。图像可能未加载。DOM可能还没准备好……回答得不错。多亏了他,@ek_ny已经解决了这个问题。但你的回答比其他人都完整,所以干杯:)