2016-08-03 9 views
1

Я новичок в веб-разработки, и последняя проблема, которую я был с раздаёт Аякса файл ...

Сейчас у меня есть два поля ввода HTML; ввод файла и кнопка.

<input type="file" name="Frame" id="Frame_"/> 
 
<input type="button" name="FrameButton" id="FrameButton_" value="UPLOAD"/>

После нажатия кнопки затем вызвать функцию, которая имеет следующий код ..

var frame = document.getElementById('Frame_'); 
 
var frameImg = frame.files[0]; 
 
var form_data = new FormData(); 
 

 
form_data.append('frame', frameImg); 
 

 
jQuery.ajax({ 
 
    url : './handler.php', 
 
    type : 'post', 
 
    data : form_data 
 
    contentType : false, 
 
    processData : false, 
 
    success : alert("Frame Uploaded") 
 
});

Когда я var_dump() для $ _POST и $ _FILES, он показывает оба массива как пустые. Это несмотря на «полезную нагрузку запроса» в показаниях Chrome Dev

Content-Disposition: form-data; Name = "кадр"; имя файла = «GoldFrame.jpg»

Content-Type: изображение/JPEG

В котором я нахожусь под впечатлением, что это означает, что информация о файле, который я выбираю на переднем конце успешно " post "ed в файл handler.php. Это неправильная интерпретация?

В любом случае, может кто-нибудь, пожалуйста, дать мне ответ на мою проблему? Или, по крайней мере, укажите ресурс, который может иметь мой ответ? Кажется, что есть много похожих вопросов по тем же направлениям, но я не видел одного, у которого есть твердый ответ.

Я использовал iframe для такого рода вещей в прошлом, но это похоже на действительно взломанный метод, и я хотел бы иметь гибкость в использовании ajax для такого рода задач в будущем.

Справка приветствуется.

+0

Здесь; посетите http://php.net/manual/en/function.error-reporting.php, а затем примените это к своему коду. Проверьте консоль. –

+0

вы задаете неверный тип содержимого, что означает, что jquery не отправляет какой-либо тип. если PHP не видит подходящий тип, он не будет ПРИНИМАТЬ представление формы/файла и не будет анализировать/заполнять ввод для $ _POST/$ _ FILES. Вы также устанавливаете processData в false, поэтому объект, который вы передаете, ** NOT ** также обрабатывается в обычном представлении. –

+0

Проверьте тип содержимого для загрузки файла. У вас есть ошибка. После этого вы можете проверить, правильно ли выполняется вызов Ajax или нет с консоли вашего браузера. Если он дает ошибку, то вы должны это проверить. –

ответ

1

Попробуйте это.

Форма (index.html)

<form id="uploadForm"> 
    <input type="file" name="frame" /> 
    <input type="submit" value="UPLOAD" /> 
</form> 

Script (script.js)

$("#uploadForm").on('submit',(function(e) { 
    e.preventDefault(); 
    $.ajax({ 
     url: "handler.php", 
     type: "POST", 
     data: new FormData(this), 
     contentType: false, 
     cache: false, 
     processData: false, 
     success: function(data){ 
      console.log(data); 
     }   
    }); 
})); 

Server Side (обработчик.php)

<?php 

var_dump($_FILES); 
+0

В массиве $ _FILES есть файл! Спасибо. В моем предыдущем решении у меня были два тега ввода, но они не были заключены в

. Вот почему мое решение не работает? – mbricep

+0

Да и при использовании ajax вы должны прекратить отправку формы по умолчанию и позволить ajax обрабатывать запрос для вас. –

0

Вы var_dump() - ваши массивы $ _FILES/$ _ POST в файле handler.php?

Если вы пытаетесь сбрасывать эти переменные в файле с вызовом ajax, это не сработает, потому что AJAX выполняет внешний интерфейс, а файлы/столбцы - это переменные на стороне сервера ... которые означает, что только файлы handler.php будут иметь эти переменные.

Попробуйте добавить вызов var_dump() в handler.php и вывести результат, который приведет к вызову ajax, и я надеюсь, что вы увидите результаты, которые вы ищете.

+0

Благодарим за отзыв. В настоящее время я использую echo 'debuggin info'; var_dump ($ _ POST); var_dump ($ _ FILES); в верхней части моего файла handler.php и получения результатов на вкладке сети консоли Chrome. Будет ли результат отличаться, если я напечатал вывод тех, которые были вызваны вызовом ajax? – mbricep

+0

Нет, они не должны быть одинаковыми. Хорошо. Будет ли возможно опубликовать код скрипта handler.php? Это поможет в отладке. – MustafaG

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