6

I am using ajax for my website. I have successfully used jQuery.ajax() to asynchronously upload file to server. I am using Dajax and Dajaxice therefore I plan to use these application for file upload as well. I tried this example. It is working fine. But if I add file field into my html form, it does not send file to server. My html form looks like

<form id="myform" action="/file/" method="post" enctype="multipart/form-data">
<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='AaSmyBEwQLSD3YghRAD9Cf2uxEjzESUe' /></div>
<p><label for="id_docfile">Select a file</label> max. 42 megabytes</p>
<p><input type="file" name="docfile" id="id_docfile" /></p>
<p><input type="submit" value="Upload" /></p>
</form>

This question has been asked at many place but never answered.

4

2 回答 2

1

我最近也遇到了这个问题。所以,我挖了一点,发现了一些答案。

它工作正常。但是,如果我将文件字段添加到我的 html 表单中,它不会将文件发送到服务器。

serialize()文档示例中使用了方法。但根据jQuery 文档

来自文件选择元素的数据未序列化。

此外,没有明确的方式来获取 ajax 文件上传,因为 JS 无法访问客户端浏览器的外部。所以,我认为不可能使用dajaxice.

我发现最简单的技巧是使用target选项将表单发布到不可见的 iframe:

<form method='POST' action='/upload' enctype='multipart/form-data' target='submit-iframe'>

所以,只有 iframe 会被刷新。使用 js,您可以从中获取捕获load()事件的数据。

此处描述的更详细的过程

于 2013-11-10T14:45:50.483 回答
1

Afaik 目前在 dajax / dajaxice 中没有规定上传文件。

我在几个项目中使用了 dajax,并通过使用blueimp/jquery-file-upload和一个 django 视图来解决这个问题,该视图接受上传文件的 POST 并将JSON字符串返回给客户端。

这是一个不太完美的解决方案,尤其是因为 jquery-file-upload 按钮的样式与普通 html 表单元素的样式不同,可以使用 jQuery-ui 设置整个表单的样式,尽管这是很多额外的工作。

dwr几乎是 Java 的 dajax,django的美味派都提供文件上传,所以理论上应该可以实现它。

如果有人发现它们有用,我很乐意发布我的 ajax 解决方案示例。

于 2013-11-09T21:44:22.973 回答