javascript formdata通过ajax

我试图通过AJAX和PHP上传文件。 我有一个HTML表单如下:

我的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得到任何回复,我也没有在firebug中看到任何请求。 相反,我得到一些模糊的错误,因为“WrappedNative原型对象上的非法操作”。 有什么建议?

您可以使用AJAX发送文件。 使用new FormData()和$ .ajax方法与contentType:false,processData:false。

看一下这个:

  

问候。

据我所知,由于安全原因,这是不可能的。

但是可以使用像jquery.form.js这样的东西(可从http://jquery.malsup.com/form/获得 )并且很容易实现。

他们也提供了一些很好的例子供你试用。