我编写了一个处理所有form
个提交的函数。
结果总是html,我插入到我的content
- div中。这就是我阻止默认事件的原因。
该函数应处理发布请求(包括文件)和获取请求。
我正在使用FormData
。为了处理我在以下配置中设置的请求:
交
processData
= false
contentType
= false
获取
processData
= true
(默认)contentType
= application/x-www-form-urlencoded; charset=UTF-8
(默认)但是当我解雇请求时,我得到:
TypeError:'append'调用未实现的对象 接口FormData。
我可以在将这两项设置都设置为false
时修复此错误,但之后没有提交任何数据。
$('#content').on('submit', 'form', function(event) { // apply to all form-elements in the content-div
event.preventDefault();
var $form = $(this);
var formData = new FormData(this);
$.ajax({
url: $form.attr('action'),
type: $form.attr('method'),
data: formData,
processData: ($form.attr('method') === 'GET'),
contentType: ($form.attr('method') === 'GET') ? 'application/x-www-form-urlencoded; charset=UTF-8' : false,
success: function(data, textStatus, jqXHR) {
$('#content').html(data);
},
error: function(jqXHR, textStatus, errorThrown) {
//
}
})
});
这样可行:
data: ($form.attr('method') === 'GET') ? $form.serialize() : new FormData(this),
这是否意味着我无法使用FormData
获取请求?或者我如何修改我的代码片段以成功处理两种请求类型?
答案 0 :(得分:0)
为这种情况创建配置对象会更好。
var ajaxConfig = {
url: $form.attr('action'),
type: $form.attr('method'),
processData: ($form.attr('method') === 'GET'),
contentType: ($form.attr('method') === 'GET') ?
'application/x-www-form-urlencoded; charset=UTF-8' : false
};
if($form.attr('method') === 'POST') {
ajaxConfig.data = formData;
}
$.ajax(ajaxConfig);