我有文件上传,但我需要能够将其他表单数据传递给它。主要是因为我可以使php动态并传递文件的类别,以便将其放在正确的文件夹中。不喜欢创建相同的确切函数十次只是改变一行。
我试过通过数据传递它在ajax中
data: {
form_data:form_data,
fileType:fileType
},
并且我尝试使用文件数据附加它,但这不起作用。
form_data.append('file_up', file_data);
form_data.append('file_up', fileType);
我有什么遗失的吗?我需要能够将该文件类型传递给php。
答案 0 :(得分:0)
如果没有看到更多代码,就很难说出问题所在。
您的第二种方法应该使用form_data.append
。 (我猜你已经命名两个追加“file_up”只是一个错字?)
这是一个工作示例(服务器端和客户端代码):
<script>
$(document).ready(function() {
$('#s').click(function() {
var form_data = new FormData();
form_data.append("file_up", $('#f')[0].files[0]);
form_data.append("file_type", $('#t').val());
$.ajax({
url: "test.php",
type: "POST",
data: form_data,
processData: false,
contentType: false,
success: function(response) {
$('#output').html(response);
},
error: function(jqXHR, textStatus, errorMessage) {
console.log(errorMessage); // Optional
}
});
});
});
</script>
<input id="f" type="file"/>
<input id="t" type="text"/>
<button id="s">Submit</button>
<div id="output">
</div>
和相应的PHP页面:
<pre><?php
echo '$_FILES:<br>';
print_r($_FILES);
echo '<br><br>$_REQUEST:<br>';
print_r($_REQUEST);
?></pre>
如果代码没有帮助,您可以尝试使用浏览器开发人员工具网络选项卡查看是否可以确定问题是客户端还是服务器端。提交ajax调用时,您的XHR请求有效负载应如下所示:
-----------------------------16516352471776150483721558073
Content-Disposition: form-data; name="file_up"; filename="test.php.zip"
Content-Type: application/zip
......BINARY FILE DATA HERE......
-----------------------------16516352471776150483721558073
Content-Disposition: form-data; name="file_type"
lsajdflkajdf
-----------------------------16516352471776150483721558073--
这是来自Firefox;我认为Chrome可能会提供类似的信息。
如果您的文件类型没有第二个表单数据部分,则问题很可能出现在您的javascript中。 (在这种情况下,如果您可以发布更多的ajax / FormData代码,将会很有帮助)。
如果该部分在那里,那么问题很可能在服务器端的某个地方。 (在这种情况下,如果您可以在尝试阅读$_REQUEST
数据的位置发布服务器端代码部分,或者执行print_r
或var_dump
$_REQUEST
)