我已经研究了很多与此主题相关的帖子,因此请不要将其标记为重复,因为没有提供直接答案。但是,如果您真的相信我可能错过了某些东西,它提供了跨浏览器支持(也支持IE8 +),请指明哪一个,然后将其标记为重复。
我想使用JQuery AJAX发布文件和一些文本数据,并使用$_FILES
和在服务器端的PHP中访问该信息$_POST
。我无需AJAX就可以做到。问题是当我开始使用AJAX时。
这是一个简单的示例:
HTML:
<form id="upload_form" method="POST" enctype="multipart/form-data">
<input type="text"/>
<input type="file"/>
<button type="submit">Submit</button>
</form>
JAVASCRIPT:
var ser_data = $('#upload_form').serialize();
...on submit... {
...
upload_promise = $.ajax({
url: 'upload1.php',
dataType: 'html',
type: 'POST',
data: ser_data,
});
...
}
好吧,我们都知道,这.serialize
只会序列化输入的文本字段,而JS等无法读取文件。在这里,我不做任何花哨的事情。我只需要一种机制,可以在服务器端使用PHP$_FILES
并$_POST
在客户端输入文件名和文本数据。实际的表单具有更多的字段(更多的文件和文本类型),但这是问题的症结所在。
要通过ajax发送文件和发布数据,应使用FormData对象。
https://developer.mozilla.org/docs/XMLHttpRequest/FormData
var fd = new FormData();
var myFileInput = $(" ... "); //adapt to access your file input
var files = myFileInput[0].files ;
// The loop is there to handle file inputs with multiple files
for(var i = 0, c = files.length ; i<c ; i++){
var blob = new Blob(files[i]);
var fileAccessName = "myFiles_"+i ;
fd.append(fileAccessName, blob, files[i].name);
}
// You can also send simple data along your files
fd.append('otherData', $("...").val());
$.ajax({
url: ... , //the form's target
data: fd,
processData: false,
type: 'POST',
success: function(rep){
// ...
}
}
// since we are sending the form trough jQuery, you should also add a ev.preventDefault() to your .submit(function(ev){}) callback
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句