收到错误时如何防止在提交()上重定向

How to prevent redirect on submit() when error is received?

本文关键字:提交 重定向 何防止 错误      更新时间:2023-09-26

我正在使用像 http://musicbrainz.org/release/72cf3c87-d97d-49cc-8781-661ad3580091/cover-art-uploader?id=17477511090 这样的页面。 这通常是 iframe 的源代码,但我在 iframe 之外的用户脚本中使用它。 我一直在测试使用 javascript 在该页面上提交表单,但我不希望提交后重定向。

这是我从控制台运行的 js:

jQuery(document.forms[0]).submit(function (e) {
    e.preventDefault();
    alert('foo');
    return false;
})[0].submit();

据我所知,它应该提交,然后事件处理程序启动以停止重定向。 但是,当服务器给出 200 状态以外的任何状态时,例如 500 内部服务器错误,我仍然会收到重定向。

所以 1)如何检测错误及其状态代码,2)即使结果是错误,我如何防止重定向?

使用普通的 submit(),这看起来并不乐观。

但是,您可以做到。 只需在从表单创建的 FormData 上使用 XHR 的 .send(),而不是尝试直接提交表单。 与 .submit() 不同,.send() 不会导致 document.location 跟随重定向。 相反,它只会遵循GET中的重定向,用于传递给XHR回调的参数,而不会触及document.location。

有关创建 FormData 的示例代码,请参阅 Rob W 在上传前对带有 chrome 扩展名的 Grab 文件的回答。

对于跨域

.send(),请参阅是否可以执行异步跨域文件上传?。