【问题标题】:FormData gets uncaught type errorFormData 获取未捕获的类型错误
【发布时间】:2016-12-01 14:32:25
【问题描述】:

我正在使用 jQuery 通过 AJAX 提交表单。我有以下代码:

$("#myForm-form").on("submit", function(event) {
    event.preventDefault();
    var formData = new FormData($(this)[0]);
    $.ajax({
        url: $(this).attr('action'),
        type: $(this).attr('method'),
        data: { 
            'eoss': 'indexEOSS',
            'form': 'myForm',
            'values': createJSON(), 
            'formData': formData 
        },
        success: function(data) {
            console.log(data);
            eval(data);
            myFormForm(data);
        },
        processData: false,
        contentType: false
    }); 
    return false
});

但是我得到了这个:

GET http://localhost/EOSS2/request.php?[object%20Object] 404(未找到)

当我删除 processData: falsecontentType: false 时,我收到以下错误:

未捕获的类型错误:非法调用

我该怎么办?

【问题讨论】:

  • 应该是POST请求
  • 为什么?不能是 GET 请求?
  • @durisvk 不,在处理 FormData 时你不能使用 GET

标签: javascript jquery ajax


【解决方案1】:

这里有两个问题。首先,您的错误消息表明您正在发送一个 GET 请求,该请求不适用于 FormData。在这种情况下,使用 POST 似乎最适用。

其次,您不能在对象中发送FormData,因为 jQuery 会尝试对其进行 URL 编码,这会导致问题。而是使用append() 方法将信息添加到您的FormData 对象。试试这个:

$("#myForm-form").on("submit", function(e) {
    e.preventDefault();

    var $form = $(this);
    var formData = new FormData($form[0]);
    formData.append('eoss', 'indexEOSS');
    formData.append('form', 'myForm');
    formData.append('values', createJSON());

    $.ajax({
        url: $form.attr('action'),
        type: $form.attr('method'), // change the attribute in HTML or hardcode to 'post'
        data: formData,
        success: function(data) {
            console.log(data);
            // eval(data); < never, ever use eval()
            myFormForm(data);
        },
        processData: false,
        contentType: false
    }); 
});

【讨论】:

  • 非常感谢,这个答案非常有帮助,现在可以使用了 :) 再次感谢您 :)
  • 没问题,很高兴为您提供帮助
猜你喜欢
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 2014-12-07
  • 2015-09-15
相关资源
最近更新 更多