首页 > 解决方案 > 如何使用 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})

标签: javascriptfetch-api

解决方案


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 */ };

推荐阅读