2016-12-01 174 views
1

我正在通过AJAX使用jQuery进行表单提交。我有以下代码:FormData获取未捕获类型错误

$("#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 (Not Found)

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

Uncaught TypeError: Illegal invocation

我应该怎么办?

+2

应该是POST请求 –

+0

为什么?它不能被GET请求? – durisvk

+0

@durisvk没有,当处理'FormData'你不能使用GET –

回答

2

这里有两个问题。首先,您的错误消息表明您正在发送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 
    }); 
}); 
+0

非常感谢你,这个答案是非常有用的,现在它工作:)谢谢你多一次:) – durisvk

+0

没问题,很高兴帮助 –