2012-11-12 33 views
3

我有一個帶有上傳字段的ExtJs表單。當我登錄表單時,Accept-header是錯誤的。響應是JSON尚SENT接受頭是:fileupload接受標題

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 

我的猜測是,它是瀏覽器的默認值。

在鉻這導致警告:資源解釋爲文獻但與MIME類型application/JSON傳送。

在Firefox中這會導致文件下載。

結論:我必須要改變/在接受頭設置爲application/json

煎茶的最高審計機關documentation它有一個headers參數,但我已經測試和文件上傳這是行不通的。評論說它不被支持。 (發現同樣的結果在另一個thread

擺脫了文件下載的任何建議/設置正確的接受頭......它不一定是一個ExtJS的sollution。如果你可以給我一個簡單的javaScript解決方案來設置文件上傳表單上的accept標頭,我可以將它製作成sencha框架。

UPDATE:

ExtJS的形式提交:

form.submit({ 
    url: API_URLS.addDocument, 
    waitMsg: 'Uploading your document...', 
    headers: { 
     "Accept": 'application/json' //doesn't work 
    }, 
    success: function() { 
     ... 
    }, 
    failure: function(){ 
     ... 
    } 
}); 

幕後它創建類似於這樣一個普通的形式:

<form action="API_URLS.addDocument" enctype="multipart/form-data" method="post"> 
    <input type="file"/> 
</form> 

可以通過JavaScript(提交submit()

+0

你是如何執行的請求可以粘貼一些代碼? – Lloyd

回答

6

Accept頭只是要求服務器響應給定類型的數據。默認頭文件中的*意味着「或其他任何東西」(儘管q值的優先級較低)。

如果響應是JSON,你想JSON,那麼你並不需要觸摸Accept頭都沒有。

的問題是,如果我從字裏行間讀正確,您要執行使用iframe一個Ajax文件上傳,和Firefox不嘗試呈現JSON文件作爲文檔。

這種情況有解決方法有兩種。

  1. 呈現爲HTML而不是JSON,然後響應使用DOM
  2. 使用XMLHttpRequest 2 and the File API上傳的文件,而不是一個iframe從中提取數據。 (注意:這使用具有有限瀏覽器支持的新API)。
+0

不是,如果它使用iframe,但我想這樣..(否則我的網頁將不得不刷新..)這是有益的..我會嘗試第一個。第二個不是一個選項。我必須支持IE7和FF + 3.6以上。 – VDP