2012-08-15 38 views
0

這是我在過去幾天中難以理解的一個難題。我在Drupal 7中使用了一種模式形式,因此在hook_form系統之外工作,嘗試上傳圖像。該表單通過ajax帖子提交,這阻止了我將該文件與帖子一起提交。我所做的是在ajax回調中,使用文件輸入創建一個新的表單元素,然後觸發一個提交,發佈到我的模塊定義的頁面。Drupal 7文件上傳(沒有hook_form)

原始輸入元素:

<input type="file" id="chooseImage" name"someImage" class="form-file"> 

JS觸發提交:

$.ajax({ 
type:'POST', 
url:$('#originalForm').attr('action'), 
data: data, 
success: function(response) { 
    if (response.success) { 
     $('<form id="imageForm" method="POST" action="upload/image/'+response.data.nid+'"></form>').appendTo($('#imageSubmit')); 
     $('#chooseImage').appendTo($('#imageForm')); 
     console.log($('#imageForm')); 
     $('#imageForm').submit(function(e){ 
      console.log(e); 
      alert('freeze! hammertime...'); 
     }); 
     //This should post the file but it isn't... 
     $('#imageForm').trigger('submit'); 
    } 
}, 
dataType:'json' 
}); 

提交事件顯示了文件屬性就好了。但是,在後端,我的頁面回調結束...

function myModule_image_upload($param){ 
     error_log('number of files = '.sizeof($_FILES)); 
    } 

我顯示沒有發佈文件。我猜測瀏覽器在.submit()運行後刪除了文章中的文件數據,如果是這種情況,我可能無力做任何事情,所以我必須在用於圖像上傳的掛鉤系統。

此外,無論這是真的在做什麼,它似乎永久打破監督,迫使我重新導入一個新的轉儲。

回答

0

試試這個:

$('<form id="imageForm" enctype="multipart/form-data" method="POST" action="upload/image/'+response.data.nid+'"></form>').appendTo($('#imageSubmit')); 

所以,你忘了設置的加密類型。

另一個錯誤:

<input type="file" id="chooseImage" name"someImage" class="form-file"> 

應該

<input type="file" id="chooseImage" name="someImage" class="form-file"/> 
+0

感謝您的答覆。是的,這是一件重要的事情,可能會在某些時候給我帶來麻煩,但不幸的是,它並沒有解決這個問題。 – user1496391 2012-08-16 00:15:38

+0

而且會做到這一點(缺少=)。 – user1496391 2012-08-16 01:27:14