【发布时间】:2015-12-30 07:17:40
【问题描述】:
我正在使用 cujojs/rest 向我的 (laravel) API 发送请求。我正在寻找一种方法来取消新请求时尚未结束的请求。
客户端上有一个取消方法,这可能是我解决问题所需要的:
我的应用显示了一个分页的项目集合,人们可以通过单击“下一个/上一个”按钮来浏览页面。 如果用户快速多次单击“下一步”按钮,则每个新页面都会触发一个新请求。我想确保只有最新的请求才能进行,而所有其他(未完成的)请求都被中止。
当我使用另一个工具来执行我的请求时,我曾经使用 beforeSend 方法来执行此操作。它会将 xhr 对象添加到数组中,并且在触发请求之前,如果它们没有结束,它将对该数组中的所有 xhr 调用 .abort()。
现在我切换到 cujojs/rest,我不知道如何使用取消方法来完成。
当然,我不想在运行新请求之前中止任何请求,只是那些利用相同资源的请求,因为我可能在其他地方加载了不相关的数据。
/users?page=1 -> should be canceled
/users?page=2 -> should be canceled
/preferences -> should NOT be canceled
/users?page=3 -> should be canceled
/users?page=4 -> should go through as its the last one
任何帮助将不胜感激。
【问题讨论】:
-
一旦请求被发送,你就不能取消它,因为取消将是另一个请求,它不会比前一个更快地传递到服务器端,所以你需要在你的代码中过滤它得到回应
-
但这不是你在使用 beforeSend 时所做的:stackoverflow.com/questions/4551175/…
-
beforeSend 事件完全按照它的写入方式触发,这意味着在发送请求之前。一旦从技术上发送,您将永远无法遗憾地取消它。但这是合乎逻辑的。但据我了解,您需要在发送之前取消它,问题是如何使用 cujojs 进行操作
-
如果您提供您的代码,我可能会提供帮助。似乎 cujojs 有 cancel 方法,所以基本上在发送请求之前你可以运行 .cancel() 它会取消所有尚未发送的请求
-
对,我正在用 VueJs 构建一个应用程序。我正在观看一个“页面”属性,当它发生变化时,它会再次触发一个 fetch 方法。
标签: javascript ajax rest request xmlhttprequest