我现在有点困惑。我有以下异步ajax调用,我传递的是successcallback。
ajax('PUT', 'some URL', successCallback, data);
我发现当请求完成时会调用此回调,因此如果等待调用完成,我无法理解该调用是如何异步的。
如果我没有将successcallback传递给ajax并从函数返回回调,我可以按预期观察异步行为
ajax('PUT', 'some URL', undefined, data);
return successcallback();
通过上述更改,我实际上观察到异步执行的ajax调用,我的页面可以继续,但如果页面重定向到其他链接,请求将被取消。所以唯一可行的选择是为ajax传递succesCallback,但它似乎是同步的而不是异步的
答案 0 :(得分:1)
我认为你的术语倒退了。 "异步"在这种情况下,意味着"在某个未来的某个时间点运行,并且不会阻止代码的立即执行"。 "同步"是一个阻止调用,它将暂停执行直到它完成。
那里的回调旨在在请求完成时执行,这是根据定义"异步"。您的备用版本无论如何都会运行成功回调,并且在启动AJAX调用之前就已经这么做了,并且不知道它是否会成功。
您需要进行异步调用,否则JavaScript代码和引擎会完全卡住,等待响应。当这是一个没有其他职责的单独流程时,这曾经是可以接受的,但它在Web应用程序中是一场灾难,您的代码可能还有其他必须响应的事项。