2012-08-15 29 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?問題的下半部分。