Конкретный вопрос: можно ли сформировать с помощью JavaScript запрос (POST) по протоколу HTML c Content-Type: multipart/form-data для отправки Файла? Пользовался поискoм, всего начитался, но до конца не могу разобраться. Вот что получается: Код (Text): req = new XMLHttpRequest(); ... req.open("POST", url, true); boundaryString = '1BEF0A57BE110FD467A', boundary = '--' + boundaryString, requestbody = ''; requestbody += boundary + '\r\n' + 'Content-Disposition: form-data; name="login"' + '\r\n' + '\r\n' + 'qq' + '\r\n' + boundary + '\r\n' + 'Content-Disposition: form-data; name="log"' + '\r\n' + '\r\n' + 'q' + '\r\n' + boundary + '--' + '\r\n'; req.setRequestHeader("Content-type", 'multipart/form-data; boundary="' + boundaryString + '" charset=windows-1251'); req.setRequestHeader("Connection", "close"); req.setRequestHeader("Content-length", requestbody.length); req.sendAsBinary(requestbody); В данном примере все работает (передача данных - не файла), но как только в данные попадают кирилические символы - запрос не работает, это связано (как мне кажется) с "метод не любит мультибайтовые кодировки" -> http://javascript.ru/blog/Brmaley.ee/FileAPI. Правиль я считаю?(кирилица - мультибайтовая кодировка?). Тогда можно использовать метод readAsBinaryString(string). Но почему он мне не доступен?: readAsBinaryString is not defined! PS 1) не хочу использовать фреймворки 2) не хочу использовать iframe для загрузки файлов
Yadfewm у вас и XMLHttpRequest не везде работать будет, его вы потом допиливать будите, потом обнаружите, что все что вы реализовали или пытаетесь реализовать, уже реализовано где то, а как думаете где можно посмотреть правильный вариант? правильно открываем фреймворк и смотрим =)
да, я полностью согласен, но =) : мой XMLHttpRequest немного подпилен, я просто не все выложил и поэтому работать будет более менее FF и последние IE, мне больше не нужно. фреймворк открывал ))) пробовал разобраться ) подумал я и закрыл На самом деле, если бы все было идеально, то формирование XMLHttpRequest - десяток строк. А вся жесть в количестве браузеров. А заливка файлов нужна только для меня в админке - пользователям нельзя, так что меня бы устроило и 10 строк вместо многокилобайтовых фреймворков.
по моему тут вся логика в точности до наоборот должна быть, это пользователям вы должны были бы написать свое небольшое и легкое решение, а на страницу с админкой имеете доступ только вы...
К сожалению правда жизни такова, что Нет небольшого и легкого решения для пользователей, а есть фреймворки, а админка будет быстро летать, потому что админ обычно сидит обычно под "свежим" браузером, вообще хочу админку на HTML5 попробовать, давно пора, а сам сайт HTML4.01 strict.. Да, кстати, проблема понемногу решается с помощью js функции Код (Text): encodeURIComponent('маша + даша') на стороне сервера соответственно Код (Text): foreach ($_POST as $key => $val) $_POST[$key] = rawurldecode($_POST[$key]); foreach ($_POST as $key => $val) $_POST[$key] = iconv('UTF-8', 'cp1251', $_POST[$key]); последняя строчка только в том случае если сайт на win-1251. На английском я не очень большой мастак читать, поэтому хорошо помогают разбираться в основах тут (кому интересно): http://javascript.ru/blog/Brmaley.ee/FileAPI http://www.codenet.ru/webmast/php/HTTP-POST.php http://xmlhttprequest.ru/#start
Передача Файла по средствам jQuery (AJAX) простой пример с гибкими настройками http://valums.com/ajax-upload/ если Вы хотите сделать красивую загрузку через ajax это то, что нужно... Код (Text): ПРОВЕРЕННО!