是带有successcallback的$ajax()调用,实际上是异步的

is $ajax() call with a successcallback really asynchronous

本文关键字:调用 异步 实际上 ajax successcallback      更新时间:2024-03-24

我现在有点困惑。我有下面的异步ajax调用,其中我正在传递一个成功回调。

ajax('PUT', 'some URL', successCallback, data);

我观察到这个回调是在请求完成时调用的,所以如果等待调用完成,我无法理解这个调用是如何异步的。

如果我不将successcallback传递给ajax并从函数返回回调,我可以观察到预期的异步行为

ajax('PUT', 'some URL', undefined, data);
return successcallback();

通过以上更改,我实际上观察到ajax调用异步执行,我的页面可以继续,但如果页面重定向到其他链接,请求就会被取消。因此,唯一有效的选项是为ajax传入successCallback,但它似乎是同步的,而不是异步

我认为您的术语已经过时了。在此上下文中,"异步"意味着"在未来某个时间点运行,不会阻止代码的立即执行"。"同步"是一个阻塞调用,它将停止执行,直到执行完成。

那里的回调是在请求完成时执行的,根据定义,这是"异步"的。不管怎样,您的备用版本都会运行成功回调,而且它早在AJAX调用启动之前就开始了,而且不知道它是否会成功。

您需要进行异步调用,否则JavaScript代码和引擎将完全阻塞,等待响应。当这是一个没有其他责任的单独过程时,这曾经是可以接受的,但在web应用程序中,这是一场灾难,因为您的代码可能有其他事情需要响应。