我試圖構建一個非常簡單,但跨瀏覽器兼容的異步文件上傳器,作爲一個jQuery插件,我有點麻煩讓文件上傳。建立一個異步文件上傳器(jQuery插件)的問題
該插件基於通過iframe提交文件輸入的原理。貝婁是插件代碼:
(function($) {
$.fn.asyncFileUpload = function(options) {
// Create some defaults, extending them with any options that were provided
$.fn.asyncFileUpload.defaults = {
action : "",
onStart : function(){},
onComplete : function(){}
};
var settings = typeof options != "undefined" ? $.extend($.fn.asyncFileUpload.defaults, options) : $.fn.asyncFileUpload.defaults;
return this.each(function(){
var date = new Date(),
form = $(this),
formID = form.attr("id"),
iframe = $(document.createElement("iframe")),
iframeID = "iframe-"+date.getTime(); // generate a unique ID for every iframe created (one iframe is associated with a single HTML form)
iframe.attr({"id":iframeID, "name":iframeID}).css("display","none").appendTo("body");
form.attr({ "target" : iframeID, "action" : settings.action });
form.on("submit", function(event){
iframe.load(function(event){
alert("iframe loaded");
});
});
});
};
})(jQuery);
的HTML:
<form id="image-upload-form" method="post" enctype="multipart/form-data">
Browse: <input type="file" id="image-to-upload" style="margin-left:5px;" />
<input type="hidden" name="tag" value="a file" />
<input type="submit" value="submit" />
</form>
<script>
$("#image-upload-form").asyncFileUpload({
action : "uploadimage.php"
});
</script>
而在服務器端,我放在一起只是一個小腳本來檢查發生了什麼事情與文件:
<?php
echo "tag: ".$_POST["tag"]; echo "<br />";
echo "error: ".$_FILES["image-to-upload"]["error"];
?>
結果是該文件沒有上傳,但「標記」輸入值以某種方式到達服務器腳本,因爲它已返回(我正在使用測試Chrome的代碼檢查器 - >網絡)。 我說這個文件沒有上傳,因爲$_FILES["image-to-upload"]["error"]
的返回值是空的,Chrome瀏覽器的進度條也不顯示,儘管我一直在嘗試上傳的文件相當大。
我在這裏做錯了什麼?
在服務器端試試這個:'echo'
';'。這將輸出PHP腳本在POST或GET變量中接收的所有內容。你也可以做'print_r($ _ FILES);'看看會發生什麼。找出問題所在 - 你可能會發現它實際上工作正常。 – jammypeach實際上只是發現了一些東西 - '$ _FILES ['images-to-upload']'將始終爲空,因爲您的文件輸入沒有名稱屬性。給它一個'images-to-upload'的名字,然後再試一次。 – jammypeach
print_r($ _ FILES)返回一個空數組,print_r($ _ REQUEST)返回相同的「tag」輸入值(「一個文件」),加上其他一些我不能使用的ID,但沒有任何關於文件:( –