2012-08-15 53 views
0

我正在处理页面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)即使结果为错误,我如何防止重定向?

+0

afaik表单的提交动作通过重定向发生;防止默认/返回假停止提交(通过停止重定向)。要在浏览器不显示新页面的情况下发出http请求,您需要一个ajax解决方案。请参阅[jQuery .ajax](http://api.jquery.com/ajax/)。 – nbrooks 2012-08-15 05:59:27

+0

这不会起作用,因为它会触发跨域限制。 – BrianFreud 2012-08-15 06:05:55

+0

在搜索表单中?它似乎在同一个域上。请参阅示例我包含 – nbrooks 2012-08-15 06:21:02

回答

0

只是简单的提交(),这看起来不大有希望。

然而,你可以做到。只需在Form中创建的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?问题的下半部分。