Перейти к содержимому

Фотография

Аплоад файлов без перезагрузки страницыAJAX


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 35

#21
XaHyMaH

XaHyMaH

    हनुमान

  • В доску свой
  • 3 152 сообщений

не совсем понял что такое "безрефрешный аплоадер"... для танкистов можно подробнее? :cry:

Аплоад файлов осуществляется посредством форм. Т.е. жмем submit и браузер формирует серверу POST запрос с передачей данных. (Т.е. файло на сервер передает браузер, а не страница.)
При этом страница с формой перегружается, что есть нормальная реакция бравзера на сабмит.
Задача — передать файл на сервер без того, чтобы страница перегружалась.
Пока самое разумное решение — фрейм.

Сообщение отредактировал XaHyMaH: 14.01.2007, 21:39:01

  • 0

#22
Жёжик

Жёжик
  • Завсегдатай
  • 231 сообщений

Задача — передать файл на сервер без того, чтобы страница перегружалась.
Пока самое разумное решение — фрейм.

Не вижу для себя практического применения этому, но все же.... Есть еще вариант решения - флэш...

Сообщение отредактировал Жёжик: 15.01.2007, 02:26:12

  • 0

#23
Kerberos

Kerberos
  • Постоялец
  • 334 сообщений

Аплоад файлов осуществляется посредством форм. Т.е. жмем submit и браузер формирует серверу POST запрос с передачей данных. (Т.е. файло на сервер передает браузер, а не страница.)
При этом страница с формой перегружается, что есть нормальная реакция бравзера на сабмит.
Задача — передать файл на сервер без того, чтобы страница перегружалась.
Пока самое разумное решение — фрейм.


все ясно :D
тогда вряд ли просто средствами ajax такое можно забацать..

Сообщение отредактировал Kerberos: 16.01.2007, 14:12:08

  • 0

#24
pompei2

pompei2
  • Завсегдатай
  • 179 сообщений
А я знаю как сделать аплоуд любых файлов без перезагрузки страницы без использования XmlHTTPRequest и без всяких там ActiveX-ов, и работать будет как на мозиле так и в ИЕ!!! Если хотите расскажу...

Да и без всяких там флэшей, мэшей и других -эшей, -ишей и -мишей. :smoke: Стандартный HTML и стандартный JavaScript (всё в рамках стандартов w3c)

Даже в lynks-е работает!!!
  • 0

#25
kornel

kornel
  • В доску свой
  • 9 069 сообщений
MODERATORIAL [kornel]
pompei2, Вы получили устное предупреждение за нарушение п.2.2.7 Правил

  • 0

#26
pompei2

pompei2
  • Завсегдатай
  • 179 сообщений
Извиняюсь, больше так не буду!

Передать файл на сервер можно следующим образом:

1) Создаём IFRAME и добавляем туда <input type=file ...> (не забывая про форму) например так:
Эдесь формируем интерфейс пользователю... (какой-нибудь метод типа init)

var iframe = document.createElement( "IFRAME" );
var form = iframe.document.createElement( "FORM" );
iframe.document.appendChild( form );
form.method = "POST";
form.action = "куда надо";

document.sendingForm = form; //сохраняем где-нибудь, чтобы потом получить доступ к ней

var uploadInput = iframe.document.createElement( "input" ); //в нем пользователь будет выбирать файл для аплоуда
uploadInput.type = "file";
uploadInput.name = "какое-нибудь имя, чтобы на сервере понять чё это такое";
uploadInput.id = "если нужно (я обычно делаю такое же как и name)";
form.appendChild( uploadInput );

var div = document.getElementById( "какой-нибудь уже существующий на странице DIV" );
while (div.childNodes.length > 0) { //очищаем див (хотя не обязательно, зависит от ситуации)
  div.removeChild( div.childNodes[0] );
}
div.appendChild( iframe ); //и добавляем туда наш ифрэйм, чтобы его увидел пользователь
// кстати, вместо DIV-а можно какой-нибудь другой контэйнер
здесь пользователь видит элемент <input type=file ...> и выбирает в нем файл
после этого он, например нажимает на кнопку "Отправить" (или еще что-то в этом духе) и запускается код, который отправляет файл на сервер. Код по сути очень маленький:
document.sendingForm.submit();

  • 0

#27
kornel

kornel
  • В доску свой
  • 9 069 сообщений
Ну и будет перегружен iframe вместо всей страницы. Не велика разница.
  • 0

#28
pompei2

pompei2
  • Завсегдатай
  • 179 сообщений
Кстати заранее заданый на сервере файл с клиента скачать невозможно. Сработает система защиты. У элемента <input type=file...> значение value установить программно невозможно.
  • 0

#29
pompei2

pompei2
  • Завсегдатай
  • 179 сообщений

Ну и будет перегружен iframe вместо всей страницы. Не велика разница.

Как я понял необходимо чтобы основную страницу "не тронуть". А чтобы пользователь не видел, что что-то перегружается можно сделать так:

var div = document.getElementById( "тот самый див, в который ифрэйм запихали" );
div.style.visibility = "hidden";
// или так div.style.display = "none";
document.sendingForm.submit();

Сообщение отредактировал pompei2: 06.02.2007, 14:37:25

  • 0

#30
kornel

kornel
  • В доску свой
  • 9 069 сообщений
Вопрос был в другом - именно средствами AJAX, т-е с помощью xmlhttprequest сформировать пост, который браузер отдаст серверу. А для этого в структуру внутри javascript нужно загрузить локальный файл. А этого сделать нельзя! Это не баг, а фитча! Не ява, не яваскрипт, не, даже, джискрипт, не умеют работать с локальными файлами! Это парадигма языка!
  • 0

#31
pompei2

pompei2
  • Завсегдатай
  • 179 сообщений
Да, абсолютно правильно.

Это сделано в целях обеспечения безопасности.

Хотя можно воспользоваться каким-нибудь ActiveX-компонентом, и получить доступ к файловой системе клиента. Но это в том случае, если клиент специально залезет в настройки ИЕ и, на свой страх и риск, разрешит использовать ActiveX-компоненты.

Это решение вполне можно применить, если создавать приложение тонкого-клиента для использования внутри локальной сети.

Сообщение отредактировал pompei2: 06.02.2007, 16:14:46

  • 0

#32
FreeX

FreeX
  • Завсегдатай
  • 116 сообщений
Вот пример простого применения AJAX:
Создаем файл index.html
Его содержимое:
<!--
www.freex.kz
-->
<html>
	<head>
		<title>Пример простого применения AJAX</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<script language="JavaScript" type="text/javascript">
			function getXmlHttpRequestObject() {
				if (window.XMLHttpRequest) {
					return new XMLHttpRequest(); 
				} else if(window.ActiveXObject) {
					return new ActiveXObject("Microsoft.XMLHTTP"); 
				} else {
					alert("Ваш браузер не поддерживает XmlHttpRequest.");
				}
			}			
			var receiveReq = getXmlHttpRequestObject();
						// Вызов функции под названием function1 		
			function function1() {
				if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {
					receiveReq.open("GET", '1.html', true); // 1.html - название загружаемой страницы
					receiveReq.onreadystatechange = content; 
					receiveReq.send(null);
				}			
			}
						// Вызов функции под названием function1 
			function function2() {
				if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {
					receiveReq.open("GET", '2.html', true); // 2.html - название загружаемой страницы
					receiveReq.onreadystatechange = content; 
					receiveReq.send(null);
				}			
			}
			function content() {
				if (receiveReq.readyState == 4) {
					document.getElementById('content_result').innerHTML = receiveReq.responseText;
				}
			}
			</script>
</head>
	<body>
		<p>
		  <a href="java script:function1();">Say Hello</a><br />
		  <a href="java script:function2();">FreeX</a>
	</p>
		<p>&nbsp;</p>
		<p><span id="content_result"></span></p>
	</body>
</html>

Внимание! Кодировка должна быть utf-8, чтоб нормально отображались русские буквы.

Создаем файл 1.html
Его содержимое:
Страница 1

Создаем файл 1.html
Его содержимое:
Страница 2

  • 0

#33
kornel

kornel
  • В доску свой
  • 9 069 сообщений
MODERATORIAL [kornel]
Какое это отношение имеет к теме? Устное предупреждение за нарушение п.2.2.7 Правил

  • 0

#34
yamaets

yamaets
  • Гость
  • 15 сообщений
я тоже как то давно этим занимался, только не помню где тот скрипт который я зделал, но идея была содрана с ipb 2.0.4, та как в любом инвижионе при создании темы атачменты добовляются без перезагрузки стрницы, если не поленитеся то найдёте как там это реализовано! да и сам я поисчу)))
  • 0

#35
T. Anre

T. Anre

    Data Miner

  • В доску свой
  • 2 327 сообщений

Библиотека JsHttpRequest поддерживает возможность закачки файлов на сервер без перезагрузки страницы. Интерфейс для этого используется тот же самый, только вместо строкового или числового значения, передаваемого методу send(), вы должны передать ему ссылку на HTML-элемент типа <INPUT type="file">:


Источник: http://dklab.ru/lib/JsHttpRequest/

Кто работал с этой библиотекой, каким образом работает механизм аплоада?
  • 0

#36
Kerberos

Kerberos
  • Постоялец
  • 334 сообщений
не работал, но ради интереса решил посмотреть что там за такой инновационный подход

/**
* JsHttpRequest: JavaScript "AJAX" data loader.
* © 2006 Dmitry Koterov, http://forum.dklab.r.../DmitryKoterov/
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* See http://www.gnu.org/c...eft/lesser.html
*
* Do not remove this comment if you want to use script!
* Не удаляйте данный комментарий, если вы хотите использовать скрипт!
*
* This library tries to use XMLHttpRequest (if available), and on
* failure - use dynamically created <script> elements. Backend code
* is the same for both cases. Library also supports file uploading;
* in this case it uses FORM+IFRAME-based loading.

*
* @author Dmitry Koterov
* @version 4.16
*/

Сообщение отредактировал Kerberos: 25.02.2007, 11:40:35

  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.