首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ajax post请求中传递第二个参数

在ajax post请求中传递第二个参数
EN

Stack Overflow用户
提问于 2018-06-07 05:22:33
回答 3查看 256关注 0票数 2

我在网上找到了一个如何使用ajax和php上传多个文件的解决方案。在ajax请求中,我传递的表单包含要上传的文件,但我还需要添加一个参数,但当我这样做时,它不起作用。我不擅长php,我尝试了很多方法来传递第二个参数,但是都没有成功。我怎么才能传递第二个参数,这样一切都还能正常工作呢?

html:

代码语言:javascript
复制
<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:

代码语言: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

代码语言:javascript
复制
<?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中添加第二个参数:

代码语言:javascript
复制
data: formData, mySecondParameter

然后在php中,当我为sql绑定params时,我想输入我从javascript传入的变量:

代码语言:javascript
复制
$str = $_POST['contentOfMySecondParameter'];
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-07 05:26:13

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

代码语言:javascript
复制
    var formData = new FormData($(element).parents('form')[0]);
    formData.append('mySecondParameter', contentOfMySecondParameter);

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

票数 4
EN

Stack Overflow用户

发布于 2018-06-07 05:28:01

最简单的方法是将<input type='hidden' name='contentOfMySecondParameter' value='???' />添加到html中。你会在php中得到$_POST['contentOfMySecondParameter']

票数 0
EN

Stack Overflow用户

发布于 2018-06-07 05:32:53

只有一个对象可以传递到那里。如果您想要另一个变量,只需将其附加到formData,如下所示:

代码语言:javascript
复制
   var formData = new FormData($(element).parents('form')[0]);
   formData.append("mySecondParameter", mySecondParameter);
        $.ajax({
            ...
            data: formData,
            ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50729819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档