通过AJAX调用时,$ _FILES不会填充文件
我正在使用简单的ajax调用来提交表单数据,我试图将一些表单输入与文件一起发送。
$("#submit-uploaded-audio").on("click", function () { var post_data = new FormData(); var file = $("#audio_file").prop('files')[0]; post_data.append('key1', 'value1'); post_data.append('key2', 'value2'); post_data.append('file', file); $.ajax({ url: "/process_audio_upload", type: "POST", data: post_data, cache: false, contentType: false, processData: false, success: function(data) { console.log(data); // some logic }, error: function(error) { // some logic here } }); });
Ajax调用转到服务器url(codeigniter框架),但调用中发布的数据没有填充到$ _POST以及$ _FILES(两个数组都为空)
检查php.ini设置和文件上传设置看起来不错
但是,“php:// input”以原始格式显示所需数据
var_dump(file_get_contents("php://input"));
我想将这些数据分别放到$ _POST和$ _FILES数组中,以便我可以做进一步的操作。
提前致谢。
还试过以下解决方案
https://stackoverflow.com/a/10899796/4349933
https://stackoverflow.com/a/10899796/4349933
它可能与post_data
变量是空的有关,因为你正在创建一个空的FormData
,然后它可能试图通过jQuery append追加 ,它被设计为附加HTML元素…
尝试简单地做:
post_data.key1 = 'value1'; post_data.file = file; console.log(post_data);
这应该返回:
FormData {key1: "value1", file: {...}}
如果FormData.append
无法正常工作,我会尝试不仅仅使用jQuery进行测试并执行Javascript默认请求 。
编辑 :测试URL是否正确
由于post_data
似乎没问题 ,因此使用相同的URL(即yourdomain.here/process_audio_upload
)通过其他网站(例如hurl.it )执行POST请求。 如果什么都没有回来,那么URL路由可能就是问题所在。
试试这段代码:
$("#submit-uploaded-audio").on("click", function () { var post_data = new FormData(); var file = document.getElementById('audio_file').files[0]; post_data.append('key1', 'value1'); post_data.append('key2', 'value2'); post_data.append('file', file); $.ajax({ url: "/process_audio_upload", method: "POST", data: post_data, contentType: false, processData: false, success: function(data) { console.log(data); // some logic }, error: function(error) { // some logic here } }); });
现在尝试打印print_r($ _ FILES)和print_r($ _ POST)
我注意到你使用的是’type’参数而不是’method’。 所以试试这个代码。 我做了一些改动。
尝试通过将
元素传递给构造函数来创建formData对象。 例如,给出这个HTML
并假设key1
和key2
是
中元素的名称
$("#submit-uploaded-audio").on("click", function () { var form = document.getElementById('a-form'); var post_data = new FormData(form); $.ajax({ url: "/process_audio_upload", method: "POST", data: post_data, //etc ...
好文档在这里