2012-04-26 2 views
2

Я пытаюсь отправить один файл и одну текстовую переменную на свой сервер с помощью объекта FormData. Посмотрев вкладку «Сеть» в инструментах разработчика Chrome, я вижу, что файл и переменная отправляются. Тем не менее, я попытался var_dump() для переменных $ _POST и $ _FILES, и оба они показаны как пустые массивы. Вот код, я использую для формы:Используя объект FormData, сервер получает пустой POST

var image_upload = document.getElementById("image_upload"); 

if(image_upload.value == '') 
{ 
    alert("Please select a file to upload."); 
} 
else 
{ 
    alert("in"); 
    var ajaxHandler = new XMLHttpRequest(); 
    var content = image_upload.files[0]; 
    var formData = new FormData(); 
    formData.append("type", "5"); 
    formData.append("content", content) 

    ajaxHandler.onreadystatechange = function() { 
     if(ajaxHandler.readyState == 4) 
     { 
     alert(ajaxHandler.responseText); 
     } 
    }; 

    ajaxHandler.open("POST", "newCard", false); 
    ajaxHandler.setRequestHeader("Content-type","multipart/form-data"); 
    ajaxHandler.send(formData); 
} 

Я попробовал этот код и без «Charset = UTF-8» в типе контента, и это не похоже, чтобы сделать разницу. Что тут происходит?

ответ

6

Удалить код ajaxHandler.setRequestHeader("Content-type","multipart/form-data");. Правильный заголовок multipart/form-data должен содержать граничную строку. Браузер автоматически устанавливает этот заголовок, если вы добавляете файл в FormData.

+0

Подтвержденные исправления аналогичной проблемы, возникшей у меня в Chrome с некоторым кодом загрузки файла FormData. Благодаря! –

+0

Huh. Интересно, как это происходит. + 1 – Qix

+0

Работал для меня. хотя я избавился от setRequestHeader («Content-Type», «application/x-www-form-urlencoded»); – kiwicomb123

Смежные вопросы