2010-05-18 52 views
4

被抓我的頭時間過長這樣的:使用jquery.form,(http://malsup.com/jquery/form)與PHP ...我$_FILES['someimage']被確定,但錯誤號始終是UPLOAD_ERR_NO_FILE,大小也爲0。jqueryForm空上傳

中的JavaScript:

$('form input[type=file]').change(function() { 
    $(this).clone().appendTo('#imgform'); 
    $('#imgform').ajaxForm(); 
    $('#imgform').ajaxSubmit({ 
     type: 'POST' 
    }); 
}); 

其中追加到:

<form id="imgform" method="POST" action="/api/images.php" enctype="multipart/form-data"></form> 

從具有沼澤標準文件輸入另一種形式。

PHP日誌很乾淨,但var_dump ing $ _FILES總是顯示索引被設置爲表單元素的名稱...但沒有數據。

謝謝你們! (對不起,我知道類似jQuery的問題在這些部分中過於頻繁)。

編輯 我發現Clone a file input element in Javascript其中包含進一步的信息和建議的替代。

我決定做的是有非JavaScript的瀏覽器的單一形式,和JavaScript/jQuery的打破了單一形式爲三種形式:

Head form -> File upload form -> tail form

然後我可以張貼文件上傳異步和當單擊尾部的提交時,將表單粘貼到POST中,因爲它們只是文本字段。

+0

jQuery的問題不是太頻繁。 '只是使用jQuery的答案太頻繁了。 – 2010-05-18 09:50:37

+0

是真的,但jquery標籤有2200或什麼 – 2010-05-18 09:54:54

回答

2

兩件事情我看到,當我嘗試運行此。既然你是克隆然後追加,我不知道你的文件輸入是否存在於表單的上下文中。如果不是,那麼$('form input[type=file]')將永遠不會找到要克隆的元素。

雖然瀏覽器處理文件上傳控件的方式也許是最大的問題。您無法以編程方式在文件輸入控件上設置值 - 否則作爲Web開發人員將自動將文件上載值設置爲「c:\ Files \ MyPasswordFile.txt」並自動將該窗體無形地提交給用戶將是微不足道的。

當我改變你的代碼如下:

<input type="file" name="imageFile" /> 
<form id="imgform" method="POST" action="/api/images.php" enctype="multipart/form-data"> 

</form> 

<script> 
    $('input[type=file]').change(function() { 
    alert("ACTION"); 
    $(this).clone().appendTo('#imgform'); 
    //$('#imgform').ajaxForm(); 
    //$('#imgform').ajaxSubmit(
    //  { 
    //   type: 'POST' 
    //  } 
    // ); 
    }); 
</script> 

我可以看到的行爲如上 - 現場進行了克隆,追加 - 但它沒有價值。由於克隆過程的一部分涉及設置字段值 - 這將違反該安全限制並因此失敗。

+0

+1因此,克隆它將刪除它的價值..有趣。 – 2010-05-18 11:16:02

+0

情況是我有一個圖片上傳的表單。我想上傳圖片,但不會發布整個表單。 JS-less,圖像將與主要形式一起使用,但與JS一起,它完成異步。任何想法,如果我不克隆或移動節點? – 2010-05-18 14:42:57

+0

你可以把文件上傳組件放在一個單獨的表單中嗎? – BradBrening 2010-05-18 15:41:56

0

您無法使用ajax發佈文件,因爲出於安全原因,javascript無法訪問任何本地硬盤驅動器。

有許多方法可以模仿使用iFrames的ajax發佈。這個鏈接就是一個很好的例子。

http://www.ajaxf1.com/tutorial/ajax-file-upload-tutorial.html

+0

雖然這是「一般」真,但Malsup jQuery表單插件支持使用隱藏iframe的「ajax」文件上傳。點擊提供的鏈接海報,並描述如何完成。 – BradBrening 2010-05-18 10:56:14

+0

此外,我第一次錯過了它,但AJAX和文件上傳的問題與安全無關,這是由於帶有文件上傳的表單使用enctype =「multipart/form-data」參數發送 - 哪個MIME編碼提交。 XmlHTTPRequest(或等效)對象不支持這一點。 – BradBrening 2010-05-18 11:20:28

+0

@Tom - 感謝您的帖子...(但是多餘的:P) – 2010-05-18 12:10:07