繁体   English   中英

jQuery AJAX从表单发送文件数组

[英]JQuery AJAX sending files array from form

我在某处获取此代码即可上传图片,而无需刷新浏览器。 但是我不喜欢上载器文件,所以我决定使用以前使用的旧文件。 问题在于它正在发送一个数组而不是来自javascript文件的字符串(它打算发送给多个文件而不是一个文件)。 这是组成数组的代码:

input.addEventListener("change", function (evt) {
    document.getElementById("response").innerHTML = "Loading . . ."

    var i = 0, len = this.files.length, img, reader, file;

    for ( ; i < len; i++ ) {
        file = this.files[i];
            if (formdata) {
                formdata.append("uploaded_file[]", file);
    }   }   }

    if (formdata) {
        $.ajax({
            url: "img_upload.php",
            type: "POST",
            data: formdata,
            processData: false,
            contentType: false
        }).done(function (res) {
                            /* *** show uploaded item *** */
                            /* *** show response *** */
            });
    }

我对Javascript的了解真的很薄弱,我找不到如何修改此代码以单独发送上传文件而不是发送数组的方法。

我独立尝试了这些,但是没有一个起作用(send_img是表单名称/ id):

formdata = document.send_img.uploaded_file.value;
formdata = document.getElementById("uploaded_file");
formdata = new formdata ($('#send_img'));
formData = $('#send_img').serialize();
formdata.replaceWith("uploaded_file[]", file);

我也尝试消除for使用相同的键(0),但这种方式不起作用。 img_upload.php的压缩代码为:

$fileName = $target . $_FILES["uploaded_file"]["name"];
$fileTmpLoc = $_FILES["uploaded_file"]["tmp_name"];
$fileName = $new_name .  "."  . $fileExt;
move_uploaded_file($fileTmpLoc, "images/images/temp/$fileName");

如何仅用一个字符串发送上载的文件(或标头或应发送的任何内容),并且在添加第二个文件的情况下,如何替换第一个文件而不是在数组中创建第二个值?

问题不是您的逻辑,问题是无法通过ajax上传文件。

但是也许您会问,别人是怎么做的? 好吧,尝试使用表单插件(另一个与jQuery兼容的.js)

我为您找到了它,它可以使用“提交”方法工作,但是也许您可以在输入更改时进行提交,或者使用JavaScript操作找到其他类型的解决方案。

检查此: http : //www.miguelmanchego.com/2009/subir-archivos-usando-ajax-jquery/

网站是西班牙语,但如果需要,可以将其翻译为英语。 该链接还包括一个实时示例和源代码下载。

问候。

以下是我的Ajax设置,可以上传文件

method: "POST",
        url: url,
        headers: { 'Content-Type': undefined },
        transformRequest: function (data, headersGetter) {
            var formData = new FormData();
            angular.forEach(data, function (value, key) {
                if (Array.isArray(value)) {
                    // To save array of items
                    angular.forEach(value, function (value1, key1) {
                        if (value1.constructor.name != "File") {
                            angular.forEach(value1, function (value2, key2) {
                                formData.append(key + '[' + key1 + '].' + key2, value2);
                            });
                        }
                    });
                } else {
                    formData.append(key, value);
                }
            });

            return formData;
        },
        enctype: 'multipart/form-data',
        dataType: 'json',
        traditional: true,
        data: data,
        cache: false,
        processData: false,
        contentType: false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM