Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > XMLHttpRequest() отправка файла


Автор: Виктop 25.10.2015, 15:46
Всем здрасти, не получается отправить файл на сервер, с обычной формы файл.php принимает и сохраняет, а c помощью new XMLHttpRequest() шлёт ответ что запрос принят, но не сохраняет файл, скорее всего проблема в заголовках отправляемых скриптом, помогите разобраться
Код

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>отправка</title>
</head>
<body>
<form name="form1" enctype="multipart/form-data">
  <input type="file" name="img" id="img" />
  <br />
  <input type="button" value="Отправить" onclick="upload(form1)" />
  <p>Ответ: <span id="res"></span></p>
</div>
<script type="text/javascript">
function upload(form1)
    {
    var form = document.form1;
    var img = form.img.value;
    var boundary = String(Math.random()).slice(2);
    var file = ['\r\n--'+boundary+'\r\nContent-Disposition: form-data; name="img"; filename="image.jpg"\r\nContent-Type: image/jpeg\r\n\r\n'+img+'\r\n --'+boundary+'--\r\n'];
    var xmlhttp = new XMLHttpRequest(); // Создаём объект XMLHTTP
    xmlhttp.open('POST', 'test.php', true); // Открываем асинхронное соединение
    xmlhttp.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary); // Отправляем кодировку
    xmlhttp.send(file); // Отправляем POST-запрос
    xmlhttp.onreadystatechange = function() // Ждём ответа от сервера
        {
        if (xmlhttp.readyState == 4) // Ответ пришёл
            {
            if(xmlhttp.status == 200) // Сервер вернул код 200
                {
                document.getElementById("res").innerHTML = xmlhttp.responseText; // Ответ сервера
                }
            }
        }
    }
</script>
</body>
</html>

Автор: ksnk 25.10.2015, 17:54
Гуглить FormData, смотреть примеры и использовать его. Вручную собирать запрос на JS не очень разумно.

Автор: Виктop 25.10.2015, 18:52
Спасибо, FormData - это хорошо, но мне этот вариант не подходит, FormData формирует заголовки исходя из формы, в моём же случае форма существует только как пример, а файл должен быть отправлен нажатием конопки button, без какой либо формы

Автор: ksnk 25.10.2015, 20:08
FormData не обязательно привязывать к форме. Можно просто напихать туда нужных полей и файлов и послать... 

Автор: Виктop 25.10.2015, 20:20
Во как? Так уже интересней, тогда пойду гуглить на эту тему, ещё раз спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)