Отправка формы содержание через звонок AJAX.Только JQuery работает с FormData?
Эта форма:
<form id="id_of_form" enctype="multipart/form-data">
<input type="text" name="name" id="name" />
<input type="file" name="fileField" id="fileField" />
<br/><br/>
<input class="button" type="submit" value="Upload"/>
</form>
Мой предпочтительный метод состоит в следующем:
Метод 1
<script type="text/javascript">
$(document).ready(function(){
$('#id_of_form').on('submit',function(e){
e.preventDefault();
var formdata = new FormData($(this)[0]);
var ajax = new XMLHttpRequest();
ajax.open("POST", "testing.php", true);
ajax.onreadystatechange = function(){
if(ajax.readyState == 4 && ajax.status == 200){
var returnVal = ajax.responseText;
... do stuff here ...
}
}
ajax.send(formdata);
});
});
</script>
Это Сорта работает. В моем PHP if($_POST)
возвращает TRUE, но if($_FILES)
возвращает FALSE (когда и имя, и поле файла содержат что-то). Когда я var_dump($_POST)
в моем PHP, он выплевывает следующее:
array(312) { ["------WebKitFormBoundaryoypwTdV9MSCqJC2F Content-Disposition:_form-data;_name"]=> string(5698) ""name" qwert ------WebKitFormBoundaryoypwTdV9MSCqJC2F Content-Disposition: form-data; name="fileField"; filename="carved-coral-beads.jpg" Content-Type: image/jpeg ���� VExifMM* ���=�19(1A2_��s������i ��SA
^только аббревиатура - на самом деле гораздо больше.
var_dump($_FILES)
возвращает
array(0) { }
Метод 1 работает только тогда, когда я посылаю данные следующим образом:
ajax.send("username=something&var2=somethingelse");
, но я не могу включать любые файлы (в частности, изображение) в сюда.
Если я использую JQuery, чтобы отправить его:
Метод 2
<script type="text/javascript">
$(document).ready(function(){
$('#id_of_form').on('submit',function(e){
e.preventDefault();
var formdata = new FormData($(this)[0]);
$.ajax({
url: "testing.php",
type: "POST",
data: formdata,
contentType: false,
cache: false,
processData:false,
success: function(data){
... do stuff here ...
}
});
});
</script>
это работает просто отлично, и я могу разобрать содержание и файл в моем PHP.
Как раз по привычке, я хотел бы использовать метод . Метод 1. Почему будет Метод 2 с версией JQuery работает отлично, но первый метод flops?
Заранее спасибо.
Фиксация опечатки отправляет данные (текстовое поле, поле файла). Но в моем PHP я получаю 'if ($ _ POST)' возвращает * TRUE * while 'if ($ _ FILES)' возвращает * FALSE *. Разве оба они не вернутся? И я не могу получить доступ к '$ _POST ['name']', но я могу использовать метод JQuery. 'var_dump ($ _ POST)' дает следующее ...'array (312) {[" ------ WebKitFormBoundaryoypwTdV9MSCqJC2F Content-Disposition: _form-data; _name "] => string (5698)" "name" qwert ------ WebKitFormBoundaryoypwTdV9MSCqJC2F Content-Disposition: form- data; name = "fileField"; filename = "carved-coral-beads.jpg" Content-Type: image/jpeg VExifMM * 'и on ... – Birrel
@Birrel, почему вы использовали бы' $ _POST' для обрабатывать файлы загружается? его в '$ _FILES' – Ghost
У меня есть текстовое поле для (« name »). Линия' echo $ _POST ['name'] 'ничего не возвращает. Вот почему я сделал дамп var для' $ _POST' - проверить, что там было. Очевидно, что это не простая пара ключей/значений, а какая-то беспорядочная беспорядок. Я отредактировал исходный вопрос, чтобы включить исправление опечатки, и объясню, что я получаю. – Birrel