javascript - 在ajax post请求中传递第二个参数
问题描述
我在互联网上找到了一个关于如何使用 ajax 和 php 上传多个文件的解决方案。在 ajax 请求中,我正在传递带有选择要上传的文件的表单,但是我需要再添加一个参数,但是当我这样做时,它不起作用。我不擅长 php,我尝试以多种方式传递第二个参数,但都没有奏效。如何传递第二个参数以便一切正常?
html:
<form method="post" enctype="multipart/form-data">
Select files to upload:
<input name="file[]" type="file" multiple>
<input type="button" onclick="upload(this)" value="Upload"/>
</form>
javascript:
function upload(element) {
var formData = new FormData($(element).parents('form')[0]);
$.ajax({
url: 'upload.php',
type: 'POST',
success: function (callback) {
// some code
},
data: formData,
cache: false,
contentType: false,
processData: false
});
}
php
<?php
$mysqli = include 'connection.php';
$total = count($_FILES['file']['name']);
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
for ($i = 0; $i < $total; $i++) {
$name = $_FILES['file']['name'][$i];
$size = $_FILES['file']['size'][$i];
$location = 'uploads/';
$target_file = $location . basename($name);
if (isset($name)) {
if (empty($name)) {
echo 'Please choose a file' . "\n";
} else if (file_exists($target_file)) {
echo 'File already exists.' . "\n";
} else if ($size > 1000000) {
echo 'File is too large' . "\n";
} else {
$tmp_name = $_FILES['file']['tmp_name'][$i];
$statement = $mysqli->prepare("INSERT INTO files (name, subjectId) VALUES (?, ?)");
$str = '1'; // here I would like to set variable using $_POST
$statement->bind_param('ss', $name, $str);
if (move_uploaded_file($tmp_name, $location . $name)) {
if ($statement->execute()) {
echo 'File successfully uploaded :' . $location . $name . "\n";
} else {
echo 'Error while executing sql' . "\n";
}
} else {
echo 'Error while uploading file on server' . "\n";
}
}
}
}
}
所以我想得到的是在javascript中添加第二个参数:
data: formData, mySecondParameter
然后在 php 中,当我为 sql 绑定参数时,我想输入从 javascript 传递的变量:
$str = $_POST['contentOfMySecondParameter'];
解决方案
您可以使用FormData.append()
添加更多参数。
var formData = new FormData($(element).parents('form')[0]);
formData.append('mySecondParameter', contentOfMySecondParameter);
然后$_POST['mySecondParameter']
在 PHP 中使用来获取这个参数。
推荐阅读
- sql - 使用点表示法和 sum() 在多个数据库中查询相同但多列
- multithreading - Mac 允许的最大线程数
- html - 如何使 Bootstrap 表中的嵌套表不继承父 Bootstrap“表”类?
- java - 在 JAVA 中重构 JSON 文件
- python - 从两个数据文件中提取唯一行
- xtext - Xtext 和 XBase 的语法限制 JVMModelInferrer 继承
- python - ImageMagick 未授权将 PDF 转换为图像
- go - go channel 读取并发和阻塞
- android-studio - 如何使用 Kotlin 从 Google Drive 获取信息?
- java - 更新 firebase 中的一些数据,并在同一个“父级”中保持其他数据不变