2012-07-03 22 views
0

我有一个Django webapp与一种新闻源功能。新闻馈送具有与他们相关联的标题,身体和图像。用户可以编辑和更新他们的新闻传送,包括添加新的图像。jQuery通过ajax发布文件和文本

目前我得到的所有数据对每个信息源项目,像这样:

var newsfeeds = []; 
$('.feed').each(function (index, element) { 
    var feed_dict = {'title': $(this).children('#title').val(), 
        'id': $(this).children('#feed_' + index + '_id').val(), 
        'should_delete': $(this).children('#should_delete').val(), 
        'subtitle': $(this).children('#subtitle').val(), 
        'body': $(this).children('#body').val()}; 
    newsfeeds.push(feed_dict); 
}); 

它使用$.ajax()然后被红牌罚下。这很好。

现在我正在处理图像的东西。每个Feed都有一个带有唯一ID的关联<input type="/>,所以我应该可以获取每个文件。接下来的问题是如何以Django的request.POSTrequest.FILES中的所有数据发送它们。我已经使用FormData对象试图JS像这样:

var data = new FormData(); 
$('.image_input').each(function(index, element) { 
    data.append('file_' + index, element.files); 
}); 

但是这给了我在Firebug一个NS_ERROR_CANNOT_CONVERT_DATA

在这一点上,我很迷茫。任何指针都会非常有帮助。

+0

这是一个浏览器特定的问题? – mmcglynn

+0

我不这么认为 - 它不适用于Chrome,Firefox或Safari。 – Peter

回答

0

实际上不可能通过ajax发送文件 - 如果你使用类似jquery form plugin的东西来'劫持'你的表单,它会在后台将它提交给iframe,而不是使用XHR。

无论如何,你应该真的写你的表格,使他们的工作没有JavaScript,然后使用jQuery表单到progressively enhance他们。那么你甚至不需要担心这种事情。

+0

真的吗?这根本不可能?然后,XHR请求和浏览器的普通POST之间有什么不同? – Peter

+0

XHR是通过JavaScript创建的,普通的POST来自提交表单...我不太确定你在这里问什么。但无论如何,是的,这是不可能的。 请注意,我并不是说你不能通过ajax提交文件,只是在幕后你需要使用隐藏的iframe来完成它。 – Greg

+0

好吧,我重写了代码以使用表单并且完美地工作。谢谢! – Peter