有什么理由使用同步XMLHttpRequest?
看起来大多数人都使用XMLHttpRequest进行异步请求,但显然有能力执行同步请求的事实表明可能有这样做的正当理由。 那么这个合理的原因是什么?
我认为随着HTML 5标准的进展,它们可能会变得更受欢迎。 如果一个Web应用程序可以访问Web工作人员,我可以预见开发人员使用一个专门的Web工作人员来提出同步请求,就像Jonathan说的那样,以确保在另一个请求之前发生一个请求。 对于一个线程的当前情况,这是一个不太理想的设计,因为它会阻塞,直到请求完成。
同步XHR对保存用户数据很有用。 如果处理beforeunload
事件,则可以在用户关闭页面时将数据上传到服务器。
如果这是使用异步选项完成的,那么在请求完成之前页面可能会关闭。 这样做同步确保请求以预期的方式完成或失败。
更新:
下面暗示 - 但并未成功交付 - 随着更好的异步请求处理的出现,实际上没有理由使用同步请求,除非打算在请求完成之前故意阻止用户做任何事情 - 听起来是恶意的: )
尽管这听起来很糟糕,但在用户离开页面之前或执行某个操作之前,可能有时候发生请求(或一系列请求)很重要 - 阻止其他代码执行(例如阻止后退按钮)可能会可能减少设计不佳的系统的错误/维护; 说,我从来没有在野外看到它,并强调它应该避免。
像promise一样,图书馆通过通过回调链接进程假装同步。 这适合于大多数需要订购的开发需求,这些非阻塞事件使浏览器能够保持对用户的响应能力(良好UX)。
正如Mozilla文档中所述,有些情况下您必须使用同步请求; 然而,列出的还有一种解决方法,它使用beacon(在IE / Safari中不可用)。 虽然这是实验性的,但如果它达到标准的接受程度,它可能会在同步请求棺材中占据一席之地。
您希望在任何类似事务的处理中执行同步调用,或者需要任何操作顺序的地方执行同步调用。
例如,假设您想要自定义事件以在播放歌曲后将其注销。 如果首先登出操作,那么歌曲将永远不会播放。 这需要同步请求。
另一个原因是使用WebService时,特别是在服务器上执行数学运算时。
示例:服务器具有值为1的变量。
Step (1) Perform Update: add 1 to variable
Step (2) Perform Update: set variable to the power of 3
End Value: variable equals 8
如果第一步发生步骤(2),则结束值为2,而不是8; 因此操作顺序和同步是必要的。
在同一个现实世界的例子中,很少有同步调用是合理的。 也许当点击登录然后点击需要用户登录的网站的一部分时。
正如其他人所说的那样,它会捆绑您的浏览器,因此请尽可能远离它。
不过,用户通常不想使用同步调用来停止当前正在加载的事件,然后执行其他操作。 在某种程度上这是同步,因为第一个事件在第二个事件开始之前退出。 为此,请在xml连接对象上使用abort()方法。
链接地址: http://www.djcxy.com/p/9433.html上一篇: Is there any reason to use a synchronous XMLHttpRequest?