2013-11-01 3 views
17

Я пытаюсь отправить файл из формы с помощью метода ajax JQuery в:Отправка файла с jQuery.ajax дает TypeError

var ofile=document.getElementById('image').files[0]; 
var formdata = new FormData(); 
formdata.append("image",ofile); 

$.ajax({ 
    url:'elements/save_elements', 
    data:formdata, 
    type:'POST' 
}); 

Это приводит к ошибке TypeError: 'append' called on an object that does not implement interface FormData.

В чем причина этой ошибки? Это не происходит на фактическом formdata.append, но внутри jQuery.

+0

Какой браузер вы используете? – Chickenrice

+0

okk, нет проблем сэр, я получил ответ – user2889070

ответ

98

У меня была такая же проблема с похожим кодом. Существует серьезная нехватка информации об этой ошибке, так как ОП не уточнил:

С некоторой отладкой я понял, что ошибка была вызвана вызовом ajax в глубинах jquery, а не фактическим добавлением. Оказывается, я забыл добавить processData: false, contentType: false в запрос ajax; Это устранило проблему.

+0

Спасибо. Я прочитал о processData: false ... но не contentType – deach

+0

Это, действительно, правильный ответ. –

+0

Оказывается, если вы ошибаетесь '' processData'' как '' proccessData'', вы также получите ту же ошибку. Умеренная. – iiminov

1

Он отлично работает, когда вы добавляете следующее Аякса объекта:

contentType: false, 
processData: false, 

Так оно и должно выглядеть:

$.ajax({ 
    url:'elements/save_elements', 
    data:formdata, 
    type:'POST', 
    contentType: false, 
    processData: false, 
}); 
0

Добавление этих параметров Аяксу решить проблему

$.ajax({ 
     url: 'upload_ajax.php', 
     type: 'POST', 
     data: formData, 
     contentType: false, 
     processData: false, 
Смежные вопросы