Javascript 添加.done函数时,jQuery AJAX调用在不使用命令的情况下启动
我正在重写一系列jQueryAjax请求,并且在Javascript 添加.done函数时,jQuery AJAX调用在不使用命令的情况下启动,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在重写一系列jQueryAjax请求,并且在.done代码块方面遇到了问题。我试图发送一个AJAX请求,并在处理数据之前等待响应。作为指导,我一直在使用以下页面: 我还研究了无数的堆栈问题,试图解决我的问题,但没有找到任何有用的方法。作为参考,我看到的一些问题如下: 我注意到,当我创建类似于上述指南的代码块时,函数在页面加载时运行,而不是在代码中触发时运行。为了隔离故障,我创建了一个简单的示例,如下所示: <!DOCTYPE html> <html lang=&qu
.done
代码块方面遇到了问题。我试图发送一个AJAX请求,并在处理数据之前等待响应。作为指导,我一直在使用以下页面:
我还研究了无数的堆栈问题,试图解决我的问题,但没有找到任何有用的方法。作为参考,我看到的一些问题如下:我注意到,当我创建类似于上述指南的代码块时,函数在页面加载时运行,而不是在代码中触发时运行。为了隔离故障,我创建了一个简单的示例,如下所示:
<!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(){
log('enter getData');
返回$.ajax({url:'./testajax.html',键入:“POST”});
}
getData().done(函数(数据){
console.log('enterdone');
警报(数据);
});*/
函数getData(){
log('enter getData');
$.ajax({url:'./testajax.html',键入:“POST”})
.完成(功能(数据){
console.log('enterdone');
警报(数据);
});
警报(“之后”);
}
我希望加载示例页面时不会发生任何事情,因为除非单击按钮,否则不会触发执行getData()
函数。但是,当我加载页面时,我的控制台会记录“enter getData”,然后记录“enter done”,然后我会收到一个带有/testajax.html
页面内容的警报(只有一个字符串)。此外,当我单击按钮时,它会进入getData()
,但不会触发getData().done
函数,因此不会收到警报
有没有人能在这里引导我正确的方向,帮助我阻止getData()
函数在页面加载时执行,而是让按钮单击执行AJAX请求,等待结果,然后在.done
块中执行代码?getData()
您拥有的表达式立即调用pageload上的函数。然后将.done
处理程序附加到它
听起来您需要一个调用$.ajax
并向其附加.done
的函数,如:
function getData() {
console.log('enter getData');
$.ajax({ url: './testajax.html', type: "POST" })
.done(function (data) {
console.log('enter done');
alert(data);
});
}
然后将getData
作为事件处理程序附加到某处
。使用
.addEventListener
或jQuery的.on('click'
)。谢谢@certainperformance,它解决了页面加载时代码执行的问题,但执行的时间仍然不确定。我已更新了问题,以包括警报('after');
,该警报当前在警报(数据)之前触发
行。有没有办法让它等到AJAX请求完成后再继续执行代码?我可以将所有内容嵌套在连续的函数中。完成了
但我正在寻找一种更干净的方法。你需要接受JS的异步特性-不要害怕使用它。不,没有好的方法阻止进一步执行一种方法是使用函数:getData()。然后(processData)
其中processData
是完全同步的