通过一个Ajax函数和FormData发送GET和POST请求

时间:2016-04-28 19:43:45

标签: jquery ajax

我编写了一个处理所有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获取请求?或者我如何修改我的代码片段以成功处理两种请求类型?

1 个答案:

答案 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);