如何使用Dajaxice发送文件数据?

时间:2013-05-15 12:23:03

标签: ajax jquery dajaxice dajax

我在网站上使用ajax。我已成功使用jQuery.ajax()异步上传文件到服务器。我正在使用DajaxDajaxice,因此我计划将这些应用程序用于文件上传。我试过this例子。它工作正常。但是如果我将文件字段添加到我的html表单中,它就不会将文件发送到服务器。我的html表单看起来像

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

这个问题已在很多地方被提出但从未得到过回答。

2 个答案:

答案 0 :(得分:1)

Afaik目前dajax / dajaxice中没有提供上传文件的条款。

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

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

对于Java来说,dwr几乎是dajax,而django的tasty pie确实提供了文件上传,所以理论上应该可以实现它。

我很高兴发布我的ajax解决方案的样本,如果有人发现它们有用的话。

答案 1 :(得分:1)

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

  

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

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

  

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

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

最简单的黑客攻击,我发现使用target选项将表单发布到隐形iframe:

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

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

更详细的流程here