2012-07-03 46 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