使用以下代码:
function create_table() {
$.ajax({
method: "GET",
url: "/api/data/",
success: function(data){
$('#table').load('http://127.0.0.1:8000/results');
$('#go_back').remove();
},
error: function(error_data){
console.log("errorrr")
console.log(error_data)
}
})
}
document.getElementById("create_table").onclick = function() {
create_table();
return false;
}
我想在加载#go_back
元素后删除#table
元素。问题是它没有被删除,因为代码不会等待#go_back
出现。
如何让脚本在.load
和.remove
方法之前等待?
答案 0 :(得分:2)
您遇到的问题是load
函数是异步的,而您调用的remove
函数是同步的。事件的粗略顺序如下。
load
函数对localhost进行第二次异步调用,将结果加载到标识为table
remove
函数被称为remove
函数检查DOM(文档对象模型)是否有匹配ID go_back
的元素load
函数尚未返回load
函数返回,并填充表元素的内部HTML 您的问题的解决方案是要了解在加载函数返回后,必须对进行对表元素内容的任何更改。这是通过查阅jQuery文档jQuery Load来完成的,以了解如何为完成load
函数设置钩子。这个修改应该实现你想要的:
$('#table').load('http://127.0.0.1:8000/results', function(){
$('#go_back').remove();
});

本质上,将第二个参数传递给load
函数,这是另一个回调函数。在这个回调函数中,任何代码都将在修改表元素的内部内容后执行。因此,应找到并删除go_back
元素。
答案 1 :(得分:1)
JQuery load()
函数中有一个回调函数,在加载完成时触发。因此,将该代码放在回调中,该回调仅在load()
操作完成后执行。
function create_table() {
$.ajax({
method: "GET",
url: "/api/data/",
success: function(data){
$('#table').load('http://127.0.0.1:8000/results', function(){
$('#go_back').remove();
});
},
error: function(error_data){
console.log("errorrr")
console.log(error_data)
}
})
}
document.getElementById("create_table").onclick = function() {
create_table();
return false;
}
答案 2 :(得分:1)
.load函数实际上创建了一个Ajax调用。您正在使用Ajax来获取数据',不执行任何操作,然后使用另一个Ajax调用来获取我认为是某些HTML的结果。
您可以使用Ajax函数根据数据填充html而不是再次调用。
我不确定.load是否有.done功能。但如果有,你可以删除那里的元素。
或者,您可以保持原样并将.load函数更改为正确的Ajax调用,并在success func中填充表html,同时删除元素。