【问题标题】:how to upload files from 2 different file input in from with ajax using formData?如何使用formData通过ajax从2个不同的文件输入中上传文件?
【发布时间】:2019-05-11 01:17:38
【问题描述】:

我正在尝试上传 2 个使用 ajax 格式的文件,但是当我 print_r($_POST) 和 print_r($_FILES) 时它向我显示空数组。

这是我的 html 代码:

<form id="addFloorEntityTypeFrom" method="POST" action="api/apiRoute.php" enctype="multipart/form-data boundary=----WebKitFormBoundary0BPm0koKA">
     <div class="col-md-12">
         <div class="form-group">
             <label for="categories">Category *</label>
             <select class="form-control" id="categories" name="category" required> 
                <option value="">Please select category</option>
                <?php foreach ($categories as $category) {
                    echo "<option value=\"" . $category['entityTypeId'] . "\">" . $category['entityName'] . "</option>";
                 } ?>
             </select>
        </div>
     </div>


     <div class="col-md-12">
        <div class="form-group">
          <label for="typeSVG" class="sr-only">Upload SVG *</label>
             <div class="input-group">
                <input type="text" name="filename" class="form-control custom-file" placeholder="Please select base svg file" readonly>
                <span class="input-group-btn">
                <div class="btn btn-dark custom-file custom-file-uploader">
                   <input type="file" id="typeSVG" name="entityTypeBaseSVG" onchange="this.form.filename.value = this.files.length ? this.files[0].name : ''" required/>
                                                                            Browse
                                                                        </div>
                                                                    </span>
                                                                </div>
                                                            </div>
                                                        </div>

                                                        <div class="col-md-12">
                                                            <div class="form-group">
                                                                <label for="baseImage" class="sr-only">Upload style Image *</label>
                                                                <div class="input-group">
                                                                    <input type="text" name="baseImage_filename" class="form-control custom-file" placeholder="Please base style image" readonly>
                                                                    <span class="input-group-btn">
                                                                        <div class="btn btn-dark custom-file custom-file-uploader">
                                                                            <input type="file" id="baseImage" name="base_style_image" onchange="this.form.baseImage_filename.value = this.files.length ? this.files[0].name : ''" required />
                                                                            Browse
                                                                        </div>
                                                                    </span>
                                                                </div>
                                                            </div>
                                                        </div>

                                                        <div class="col-md-12">
                                                            <button type="button" name="addFloorEntity" onclick="SaveEntity(this, true)" class="btn btn-dark mt-3">Save</button>
                                                            <button type="button" onclick="closeBaseEntity()" class="btn btn-default mt-3">Cancel</button>
                                                        </div>
</form>

这是我的 JavaScript 代码。

var formData = new FormData();
var formDataArray = $(form[0]).serializeArray();
   for(let i = 0; i < formDataArray.length; i++) {
     if(formDataArray[i].name !== 'entityTypeBaseSVG' || formDataArray[i].name !== 'base_style_image') {
        formData.append(formDataArray[i].name, formDataArray[i].value);
     }
   }
formData.append('entityTypeBaseSVG', $('#typeSVG')[0].files[0]);
formData.append('base_style_image', $('#baseImage')[0].files[0]);

$.ajax({
    method: "POST",
    url: baseUrl + 'newIFPAdmin/api/apiRoute.php',
    data: formData,
    cache: false,
    contentType: false,
    processData: false,
}).done(function (response) {
    console.log('response', response);
});

这是我的服务器端代码..

print_r(json_decode(file_get_contents('php://input'), true));
print_r($_POST);
print_r($_FILES);
exit;

回复是:

Array
(
)
Array
(
)

【问题讨论】:

    标签: javascript php html ajax file-upload


    【解决方案1】:

    请尝试此代码。它工作正常。查看屏幕截图。

    https://ibb.co/wJWLfW5

    <form id="addFloorEntityTypeFrom" method="POST" action="" enctype="multipart/form-data boundary=----WebKitFormBoundary0BPm0koKA">
    <div class="col-md-12">
    <div class="form-group">
    <label for="categories">Category *</label>
    <select class="form-control" id="categories" name="category" required> 
    <option value="">Please select category</option>
    <?php foreach ($categories as $category) {
    echo "<option value=\"" . $category['entityTypeId'] . "\">" . $category['entityName'] . "</option>";
    } ?>
    </select>
    </div>
    </div>
    
    
    <div class="col-md-12">
    <div class="form-group">
    <label for="typeSVG" class="sr-only">Upload SVG *</label>
    <div class="input-group">
    <input type="text" name="filename" class="form-control custom-file" placeholder="Please select base svg file" readonly>
    <span class="input-group-btn">
    <div class="btn btn-dark custom-file custom-file-uploader">
    <input type="file" id="typeSVG" name="entityTypeBaseSVG" onchange="this.form.filename.value = this.files.length ? this.files[0].name : ''" required/>
                                                Browse
                                            </div>
                                        </span>
                                    </div>
                                </div>
                            </div>
    
                            <div class="col-md-12">
                                <div class="form-group">
                                    <label for="baseImage" class="sr-only">Upload style Image *</label>
                                    <div class="input-group">
                                        <input type="text" name="baseImage_filename" class="form-control custom-file" placeholder="Please base style image" readonly>
                                        <span class="input-group-btn">
                                            <div class="btn btn-dark custom-file custom-file-uploader">
                                                <input type="file" id="baseImage" name="base_style_image" onchange="this.form.baseImage_filename.value = this.files.length ? this.files[0].name : ''" required />
                                                Browse
                                            </div>
                                        </span>
                                    </div>
                                </div>
                            </div>
    
                            <div class="col-md-12">
                                <button type="button" name="addFloorEntity" onclick="SaveEntity(this, true)" class="btn btn-dark mt-3">Save</button>
                                <button type="button" onclick="closeBaseEntity()" class="btn btn-default mt-3">Cancel</button>
    <script>
    function SaveEntity()
    {
    var formData = new FormData();
     var formDataArray = $("form").serializeArray();  
       for(let i = 0; i < formDataArray.length; i++) {
         if(formDataArray[i].name !== 'entityTypeBaseSVG' || formDataArray[i].name !== 'base_style_image') {
            formData.append(formDataArray[i].name, formDataArray[i].value);
         }
       }
    formData.append('entityTypeBaseSVG', $('#typeSVG')[0].files[0]);
    formData.append('base_style_image', $('#baseImage')[0].files[0]);
    
    $.ajax({
        method: "POST",
        url: 'demo.php',
        data: formData,
        cache: false,
        contentType: false,
        processData: false,
    }).done(function (response) {
        console.log('response', response);
    });
    
    }
    </script>
    

    【讨论】:

    • 我之前尝试过这段代码,但也得到了空数组。
    • 能否请您确定您使用的 jquery 版本和 php 版本,因为相同的代码对我不起作用。
    • JQuery :
    • 你注意到了吗。我已经处理了 ajax 函数“SaveEntity”onclick 并删除了表单操作值
    • 我确实注意到了所有事情,我尝试了同样的事情,我的 JQuery 版本也是 2.1.1,但我的 php 版本是 5.6.38,这段代码对我不起作用。
    猜你喜欢
    • 2015-12-22
    • 1970-01-01
    • 2017-05-14
    • 2014-03-10
    • 2015-05-16
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    相关资源
    最近更新 更多