fileupload接受标头

时间:2012-11-12 12:54:15

标签: javascript extjs http-headers

我有一个带有上传字段的ExtJs表单。当我对表单进行求和时,Accept-header是错误的。响应是JSON,但发送的Accept-header是:

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

我有根据的猜测是它是浏览器的默认值。

在Chrome中,会出现警告:资源被解释为文档但使用MIME类型application / json进行传输。

在FireFox中,这会导致文件下载。

结论:我必须将Accept-header更改/设置为application/json

Sencha的documentation sais它有一个headers参数,但我已经测试过,对于fileupload它不起作用。评论称它不受支持。 (在另一个thread中找到了相同的结果)

任何摆脱文件下载/设置正确的Accept-header的建议......它不一定是ExtJs sollution。如果你能给我一个简单的javaScript解决方案来在文件上传表单上设置accept标题,我可以把它塑造成一个sencha框架。

更新

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()

提交

1 个答案:

答案 0 :(得分:6)

Accept标题只是要求服务器响应给定类型的数据。默认标头中的*表示“或其他任何内容”(尽管q值的优先级低于此值)。

如果响应是JSON并且您需要JSON,那么您根本不需要触摸Accept标头。

问题在于,如果我正确地在行之间读取,则您尝试使用iframe执行Ajax文件上载,而Firefox不会尝试将JSON文件呈现为文档。

有两种解决方法。

  1. 将响应显示为HTML而不是JSON,然后使用DOM
  2. 从中提取数据
  3. 使用XMLHttpRequest 2 and the File API上传文件而非iframe。 (注意:这使用的浏览器支持有限的新API。)