如何在javascript中处理FormData?
我有一个全局$.ajaxPrefilter函数,可以像这样过滤XSS的值:如何在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('&'
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
。