【问题标题】:How to prevent redirect on submit() when error is received?收到错误时如何防止在 submit() 上重定向?
【发布时间】:2012-08-11 11:15:35
【问题描述】:

我正在使用像 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 Internal Server Error,我仍然会得到重定向。

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

【问题讨论】:

  • afaik 表单的提交动作是通过重定向发生的;防止默认/返回 false 停止提交(通过停止重定向)。要在浏览器不显示新页面的情况下发出 http 请求,您需要一个 ajax 解决方案。见jQuery .ajax
  • 那不行,因为它会触发跨域限制。
  • 对于搜索表单?它似乎在同一个域上。请参阅我包含的示例
  • 不,提交URL在动作属性中;它正在提交给 s3。

标签: javascript jquery form-submit


【解决方案1】:

仅使用简单的 submit(),这看起来并不乐观。

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

有关创建 FormData 的示例代码,请参阅 Rob W 对Grab file with chrome extension before upload 的回答。

对于跨域 .send(),请参阅Is it possible to perform an asynchronous cross-domain file-upload? 问题的下半部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-20
    • 2013-08-08
    • 1970-01-01
    • 2020-01-10
    • 2011-04-24
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多