【发布时间】:2021-06-01 03:56:16
【问题描述】:
我正在重写一系列 jQuery AJAX 请求,并且遇到了 .done 代码块的问题。我正在尝试发送 AJAX 请求并在处理数据之前等待响应。作为指导,我一直在使用以下页面:
http://michaelsoriano.com/working-with-jquerys-ajax-promises-and-deferred-objects/
我还查看了无数堆栈问题以尝试解决我的问题,但没有找到任何有用的东西。作为参考,我看过的一些问题如下:
jQuery Ajax call not processing .done
jquery ajax done function not firing
Confused on jquery .ajax .done() function
我注意到,当我创建类似于上述指南的代码块时,函数会在页面加载时运行,而不是在代码中触发时运行。为了隔离故障,我创建了一个简单的示例,如下所示:
<!DOCTYPE html>
<html lang="en">
<body>
<button type="button" onclick="getData()">Click me</button>
</body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
//Commented out due comment below
/*function getData() {
console.log('enter getData');
return $.ajax({url:'./testajax.html',type:"POST"});
}
getData().done(function(data){
console.log('enter done');
alert(data);
});*/
function getData() {
console.log('enter getData');
$.ajax({ url: './testajax.html', type: "POST" })
.done(function (data) {
console.log('enter done');
alert(data);
});
alert('after');
}
</script>
</html>
我期待当我的示例页面加载时,什么都不会发生,因为除非单击按钮,否则不会触发执行 getData() 函数。但是,当我加载页面时,我的控制台会记录“输入 getData”,然后是“输入完成”,并且我会收到一条警报,其中包含我的 ./testajax.html 页面的内容(只是一个字符串)。此外,当我点击按钮时,它会进入getData(),但不会触发getData().done函数,因此不会收到任何警报。
有谁能在这里指导我走上正确的道路并帮助我防止getData()函数在页面加载时执行,而是让按钮单击执行AJAX请求,等待结果,然后执行代码.done 块?
【问题讨论】:
标签: javascript jquery ajax