我想通過AJAX和PHP上傳文件。我有如下一個HTML表單:通過ajax的javascript formdata
<form method="post" id="sectiononeform" name="sectiononeform" enctype="multipart/form-data">
<div class="clearfix">
<input type="text" name="customHeading1" id="customHeading1" class="span10" value=""/>
</div>
<!-- Gets replaced with TinyMCE, remember HTML in a textarea should be encoded -->
<div class="clearfix">
<textarea id="elm1" name="elm1" rows="15" class="xxlarge" cols="80" style="width: 80%">
</textarea>
</div>
<div class="clearfix">
<input type="file" name="file1" id="file1" class="span10" />
</div>
<div class="clearfix">
<div class="actions">
<input type="submit" id="saveSection1" name="saveSection1" value="Submit" />
<input type="reset" name="resetSection1" value="Reset" />
</div>
</div>
</form>
我的jQuery代碼如下:
$(document).ready(function(){
$("#saveSection1").click(function(e){
e.preventDefault();
var formdata = false;
/*function showUploadedItem (source) {
var list = document.getElementById("image-list"),
li = document.createElement("li"),
img = document.createElement("img");
img.src = source;
li.appendChild(img);
list.appendChild(li);
} */
if (window.FormData) {
formdata = new FormData();
//document.getElementById("btn").style.display = "none";
}
var len = document.getElementById("file1").files.length, img, reader, file;
for (var i = 0 ; i < len; i++) {
file = document.getElementById("file1").files[i];
if (!!file.type.match(/image.*/)) {
if (window.FileReader) {
reader = new FileReader();
/*reader.onloadend = function (e) {
showUploadedItem(e.target.result, file.fileName);
};*/
reader.readAsDataURL(file);
}
if (formdata) {
alert("form data");
formdata.append("customHeading1", document.getElementById("customHeading1").value);
formdata.append("elm1", document.getElementById("elm1").value);
formdata.append("custsection1", 1);
formdata.append("venue_id", document.getElementById("venue_id").value);
formdata.append("images[]", file);
alert(formdata);
}
}
}
var params = $("form#sectiononeform").serialize();
//alert("params" + params);
params = params + "&custsection1=1&venue_id=" + $("#venue_id").val() + "&formdata=" + formdata;
//alert(params);
$.ajax({
type: 'POST',
url: 'saveCustomSectionData.php',
data: formdata,
success: function(data){
alert(data);
}
});
});
});
我的問題是,當我不使用文件輸入類型,我可以只序列化形式值並通過AJAX發送。由於我使用文件輸入類型,我正在使用formdata並將信息附加到它。這是發送數據的正確方式嗎?我沒有得到任何迴應的PHP,我也看不到任何螢火蟲請求。相反,我得到一些模糊的錯誤,因爲「對WrappedNative原型對象的非法操作」。有什麼建議麼?
不知道我會在完成這個項目時嘗試這個,但會投票支持你的努力。也許別人可能會受益。 – DG3 2012-04-18 21:11:28
是的..!使用FormData,我們也可以在ajax請求中發送文件。 – NkS 2012-10-19 09:25:10