2012-11-12 35 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