如何在javascript中处理FormData?

如何在javascript中处理FormData?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个全局$.ajaxPrefilter函数,可以像这样过滤XSS的值: if (typeof filterXSS == 'function') { $.ajaxPrefilter(function(options, origOptions, jqXHR) { if (typeof options.data == 'string') { var object = {}; options.data.split('&'

我有一个全局$.ajaxPrefilter函数,可以像这样过滤XSS的值:

if (typeof filterXSS == 'function') {
    $.ajaxPrefilter(function(options, origOptions, jqXHR) {
        if (typeof options.data == 'string') {
            var object = {};
            options.data.split('&').forEach(function(pair) {
                pair = pair.split('=');
                object[pair[0]] = decodeURIComponent(pair[1].replace(/\+/g, ' '));
            });
            var newData = {};
            options.data = Object.keys(object).map(function(key) {
                var value = filterXSS(object[key]);
                return key + '=' + encodeURI(value.replace(/ /g, '+'));
            }).join('&');
        } else {
            console.log(typeof options.data);
            console.log(options.data);
        }
    });
}
var file = files.shift();
if (file) {
    var formData = new FormData();
    formData.append(file);
    formData.append('value', '<script>alert("x");</script>');
    $.ajax({
        method: 'POST',
        url: $form.attr('action'),
        data: formData,
        cache: false,
        contentType: false,
        processData: false
    });
}
除了我用
FormData
调用ajax请求外,它工作正常,如下所示:

if (typeof filterXSS == 'function') {
    $.ajaxPrefilter(function(options, origOptions, jqXHR) {
        if (typeof options.data == 'string') {
            var object = {};
            options.data.split('&').forEach(function(pair) {
                pair = pair.split('=');
                object[pair[0]] = decodeURIComponent(pair[1].replace(/\+/g, ' '));
            });
            var newData = {};
            options.data = Object.keys(object).map(function(key) {
                var value = filterXSS(object[key]);
                return key + '=' + encodeURI(value.replace(/ /g, '+'));
            }).join('&');
        } else {
            console.log(typeof options.data);
            console.log(options.data);
        }
    });
}
var file = files.shift();
if (file) {
    var formData = new FormData();
    formData.append(file);
    formData.append('value', '<script>alert("x");</script>');
    $.ajax({
        method: 'POST',
        url: $form.attr('action'),
        data: formData,
        cache: false,
        contentType: false,
        processData: false
    });
}

没有这样做,但在我看来,您正在创建一个空的表单obj。我看到的示例显示了诸如newformdata(这个);或formData=新的formData(document.querySelector(“form”)@Bindrid我从较大的块中复制代码,并忘记添加
append
。在服务器端执行此操作,您可以信任结果。尚未执行此操作,但在我看来,您正在创建一个空表单obj。我看到的示例显示了诸如newformdata(这个);或formData=新的formData(document.querySelector(“form”)@Bindrid我从较大的块中复制代码,并忘记添加
append