【问题标题】:add 'normal' data along with files in XMLHttpRequest()在 XMLHttpRequest() 中添加“正常”数据以及文件
【发布时间】:2023-03-20 22:33:01
【问题描述】:

我有一个脚本,可以将表单数据发送到一个 php 文件然后进行处理。

formdata 是一个文件数组,但是我现在还想发送一些字符串,其中包含文件的原始修改日期时间。我以为这只是一个简单的单线,但它不起作用,我不知道为什么。

目标代码:

var app = app || {};

(function(o){
    "use strict"

    var ajax, getFormData, setProgress;

    ajax = function(data){
        var xmlhttp = new XMLHttpRequest(), uploaded;
        xmlhttp.addEventListener('onreadystatechange', function(){
            if(xmlhttp.readystate === 4){
                if(xmlhttp.status === 200){
                    $('#pt').html("Upload complete");
                } else {
                    $('#pt').html("Upload Error, please try again");
                }   
            }
        });
        xmlhttp.upload.addEventListener('progress', function(event){
            var percent;
            if(event.lengthComputable === true){
                percent = Math.round(event.loaded / event.total * 100);
                setProgress(percent);
            }
        });
        xmlhttp.open('POST', o.options.processor);
        xmlhttp.send(data);
    }
    getFormData = function(src){
        var data = new FormData(), i;
        for(i=0;i<src.length;i++){
            data.append('file[]',src[i]);
Here -----> // fileDate = new Date(src[i].lastModified)
----------> // data.append(fileDate)
        }
        data.append('formSent',true);
        return data;
    }
    setProgress = function(val){
        $('#pb').animate({width:val+"%"},10);
        $('#pt').html(val+"%");
    }

    o.uploader = function(opt){
        o.options = opt;
        if(o.options.files !== undefined){
            ajax(getFormData(o.options.files.files));
        }
    }
}(app));

调用对象:

$('#submit').click(function(e){
            e.preventDefault();
            $('#progressContainer').slideDown(10);
            var f = $('#file'),
                pb = $('#pb'),
                pt = $('#pt');
                fileDate = new Date(f.files[0].lastModified)
            alert(fileDate)
            // Upload file to server
            app.uploader({
                files:f,
                progressBar:pb,
                progressText:pt,
                processor:'scripts/php/upload.php'
            });
        });

我最近在 Python 中工作了很多,我的 Javascript 很生疏。

【问题讨论】:

    标签: javascript jquery xmlhttprequest


    【解决方案1】:

    你快到了,你只需要设置你要传递的参数的名称:

    data.append("myParameterName", fileDate);
    

    由于它是一个日期值,您可能希望将其转换为毫秒-since-UNIX-epoch 值 (fileDate.valueOf()) 或 ISO 字符串 (fileDate.toISOString())。

    Further reading

    【讨论】:

    • [打自己的脸]。我完全忘记了它需要一个键:值对。它现在可以工作了:)
    猜你喜欢
    • 2019-01-16
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多