javascript - ajax post请求中传递第二个参数

标签 javascript php jquery ajax

我在互联网上找到了一个关于如何使用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 中,当我绑定(bind) sql 参数时,我想输入从 javascript 传递的变量:

$str = $_POST['contentOfMySecondParameter'];

最佳答案

您可以使用FormData.append()添加更多参数。

    var formData = new FormData($(element).parents('form')[0]);
    formData.append('mySecondParameter', contentOfMySecondParameter);

然后在PHP中使用$_POST['mySecondParameter']获取该参数。

关于javascript - ajax post请求中传递第二个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50729819/

相关文章:

javascript - $(...).DataTable 在使用 Laravel Mix 时不是函数

javascript - JavaScript location.href 调用是异步的吗?

javascript - 使用php javascript动态计算输入字段

php - 在php模板中显示.txt文件内容?

javascript - 从所选下拉列表的数据属性中获取值

JavaScript utf-8 编码问题

javascript:限制项目数

javascript - 如何将php中的strtotime转换为js中的新日期

javascript - jQuery tablesorter - 从排序器/过滤器中隐藏特定的表格内容

javascript - 一种功能中的两种操作