2015-03-30 5 views
4

Я пытаюсь создать данные формы для отправки в почтовом запросе (скрипту PHP) с помощью FormData.Объект FormData всегда пуст

Однако объект FormData всегда пуст:

var oReq = new XMLHttpRequest(); 
var url = "http://www.test.com/test.php"; 
oReq.open("POST", url, true); 
oReq.setRequestHeader("Content-Type","multipart/form-data"); 
var myFormData = new FormData(); 
myFormData.append("formType","PDF"); 
myFormData.append("pdf", pdf.output(),"thisPDF.pdf"); 
oReq.send(myFormData); 

переменная «PDF» является объектом jsPDF (я проверил, что он является действительным объектом, и я попытался удалить эту линию, и только есть элемент данных «test» формы, но myFormData всегда является пустым объектом. Надеюсь, что я просто пропустил что-то простое.

Кроме того, когда я пытаюсь проверить наличие элементов формы в PHP-скрипт, он вообще не показывает элементов $ _POST и $ _FILE.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Когда я пытаюсь этот код:

var oReq = new XMLHttpRequest(); 
var url = "http://www.test.com/test.php"; 
oReq.open("POST", url, true); 
oReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
var myFormData = new FormData(); 
myFormData.append("formType","PDF"); 
alert(JSON.stringify(myFormData)); 
oReq.send(myFormData); 

можно затем получить доступ к переменной "formType" $ _POST в PHP скрипт. Но если я добавлю в оператор File append объект myFormData (и сохраню тот же «Content-Type», ошибки скрипта PHP вернут ошибку «недопустимого доступа».

Однако $ _POST устанавливается в соответствии с isset ($ _ POST) в обоих случаях, и с вставленным файлом переменная $ _FILE устанавливается в соответствии с isset ($ _ FILE).

+0

Вы знаете, что объявления переменных поднимаются вверху любой области блока, поэтому объявление варов после определенных строк может оказаться неопределенным – iamwhitebox

+0

Хотя это правда, это не проблема число рейнольдса Даже если я переместил это объявление в верхнюю часть блока, он все равно будет пустым. И не nil/null, а пустой объект FormData. –

ответ

1

Удалить код oReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); с помощью кода. Браузер автоматически устанавливает заголовок multipart/form-data, если вы добавьте файл в FormData.

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