javascript - 如何使用 fetchjsonp 中止信号?fetchjsonp(网址,{信号})?
问题描述
我需要 jsonp,但 fetch() api 不提供 jsonp 选项。所以我找到了 fetch-jsonp fetch-jsonp
但是,标准 fetch 具有可选的 abort.signal 功能。
abortController = new AbortController()
signal = abortController.signal
fetch( url, {signal})
请参阅https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch上的获取信号 api
fetch-jsonp fetch-jsonp似乎没有提供 abort.signal 选项
我该怎么做才能利用
fetchjsonp( url, {signal})
解决方案
JSONP 是一种肮脏、肮脏的 hack。它通过将<script>
元素注入页面来工作。
您不能中止它,因为它的设计初衷不是正确的 HTTP API。
自从 CORS 于 2009 年问世以来,任何 Web 服务都没有充分的理由使用它。
如果可以,请修复 Web 服务,使其支持 JSON 和 CORS 而不是 JSONP。
否则,您可能需要构建自己的 JSONP 库。最接近中止请求的方法是在事件发生后更改回调函数。
所以你会做一些类似的事情:
const id = generate_a_unique_id();
window[`callback_${id}`] = function(data) { /* do something with data */ };
const url = `http://example.com/jsonp?callback=callback_${id}`;
const script = document.createElement('script');
script.src = url;
document.body.appendChild(script);
然后中止它:
window[`callback_${id}`] = function () { /* do nothing */ };
推荐阅读
- rest - 设置一个每小时查询一次数据库以刷新其数据的 golang API
- wordpress - 如何使用 Timber/Twig 从 ACF 选项页面图像中显示缩略图
- python-3.x - 如何将一行拆分为一组单词并使用 Python 将它们转换为小写?
- php - 是否可以设置多个代理或创建 DNS 池?
- amazon-web-services - Cloudformation ipv4 和 ipv6 出口
- java - 通过用户输入改变 Setter 和 Getter
- python - 如何使用正则表达式替换 Python 中 dict 的内容
- javascript - PropTypes 不是必需的,但在 VSCode 中按要求显示
- ruby-on-rails - Chat belongs_to 两个 User 实例和 User has_many :chats (ruby on rails )
- javascript - GAS UrlFetchApp.fetchAll 将所有响应合并到一个 JSON 响应中