Я пытаюсь загрузить файл и некоторый текст внутри текстового поля вместе с помощью AJAX. Я получаю следующее сообщение об ошибке на странице PHP, которая получает данные:
Примечание: Undefined индекс: Guion в файле/путь/здесь по линии X
Это означает, что файл не отправляется. Пробовал var_dump $_FILES
и вывод его:
array(0) { }
HTML код:
<div id="_AJAX_"></div>
<div role="form">
<div id="fileGuionGroup" class="form-group">
<label for="guion">Archivo Guión</label>
<input id="fileGuion" type="file" name="guion">
</div>
<div id="txtComentarioGroup" class="form-group">
<label for="comentario">Comentario</label>
<textarea id="txtComentario" class="form-control" name="comentario" rows="4" placeholder="Ejemplo: Solicito que por favor se monte este curso en plataforma."></textarea>
</div>
</div>
<button id="send_request" type="button" class="btn btn-primary btn-block" onclick="submitSolicitud(`{$cursoKey}`)"><i class="fa fa-fw fa-cogs"></i> Solicitar Montaje</button>
Javascript Код:
function submitSolicitud(cursoKey) {
var fileGuion = document.getElementById('fileGuion');
var txtComentario = document.getElementById('txtComentario');
var formGroupGuion = document.getElementById('fileGuionGroup');
var formGroupComentario = document.getElementById('txtComentarioGroup');
formGroupGuion.className = "form-group";
formGroupComentario.className = "form-group";
var guion = fileGuion.value;
var comentario = txtComentario.value;
var formData = new FormData();
formData.append('guion', guion);
formData.append('comentario', comentario);
connect = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
connect.onreadystatechange = function() {
onRSCallback(cursoKey);
};
connect.open('POST', '?view=modalsMatriz&modal=montaje&id=' + cursoKey + '&action=solicitarMontaje', true);
connect.setRequestHeader("Content-Type", "multipart/form-data");
connect.setRequestHeader("X-File-Name", guion.name);
connect.setRequestHeader("X-File-Size", guion.size);
connect.setRequestHeader("X-File-Type", guion.type);
connect.send(formData);
};
PHP код:
case 'solicitarMontaje':
// This is the line that has the error of undefined index.
die($_FILES['guion']);
try {
if (!isset($_FILES['guion'])) {
# Code 1: Archivo Guión Field vacía
throw new Exception(1);
} elseif (!isset($_POST['comentario']) || $_POST['comentario'] == "") {
# Code 2: Comentario Field vacío
throw new Exception(2);
}
$tmp_file = $_FILES['guion']['tmp_name'];
$filename = $_FILES['guion']['name'];
move_uploaded_file($tmp_file, 'uploads/guiones/'.$filename);
die(0);
//$curso->crearSolicitudMontaje($_POST['comentario']);
} catch (Exception $e) {
# Output message to the screen so that Ajax captures it via connect.responseText @curso_FormMontaje.js
echo $e->getMessage();
}
break; # ./ case 'solicitarMontaje'
Я пробовал его с помощью FormData()
и Content-Type multipart/form-data
, но это не сработало. Вместо этого он заставлял страницу встраиваться в div _AJAX_
, который показывает сообщения, возвращаемые с сервера (например, сообщения об успешном завершении, ошибки в некоторых полях, а также поля, которые были отправлены пустым).
Это то, что я получаю в результате использования FormData
при нажатии на кнопку отправки:
https://postimg.org/image/rsnrt3yq9/
Возможный дубликат [отправки/отправки файла AJAX без jquery или iframes?] (Http://stackoverflow.com/questions/11506510/ajax-file-upload-form-submit-without-jquery-or-iframes) –
Этот код не является jQuery. Это чистый Javascript. Кроме того, я чувствую, что этот код не написан вами. Кажется, это устаревший код, загруженный где-то в Интернете. Я предлагаю вам связаться с программистом, который написал это, чтобы обновить его/ее код, так как, помимо того, что он не работает, он также очень небезопасен. – icecub
Например: это не помешает мне загрузить мой собственный PHP (или другие типы исполняемых файлов) и в значительной степени сделать то, что я хочу с вашим сервером. Как удаление вашего сайта, замена его другим веб-сайтом, удаление баз данных и т. Д. – icecub