Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновление данных через XMLHttpRequest, посылка запросов на сервер через POST 
:(
    Опции темы
Black
Дата 19.6.2005, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 2
Всего: 45



Скрипт:

Код

// Скрипт для отправки запросов на сервер без обновления страницы методом POST.
// Author: PHP-DIRECTOR <[email protected]>
// Протестировано в IE 6.0, FireFox 1.0, Opera 8.01

function createRequestObject()
{
if (window.XMLHttpRequest) { var obj = new XMLHttpRequest(); }
else {
        var obj = new ActiveXObject('Msxml2.XMLHTTP');
        if(!obj) { var obj = new ActiveXObject('Microsoft.XMLHTTP'); }
     }
return obj;
}

function ReLoad(url,data)
{
 var Req = createRequestObject();
 Req.onreadystatechange = function(){if(Req.readyState==4&&Req.status==200) { eval(Req.responseText); }};
 Req.open('POST',url,true);
 Req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
 Req.send(data);
}

setInterval('ReLoad("name.php","name1=value1&name2=value2")', 5000);


Данный код посылает данные методом POST на сервер без перезагрузки страницы.
Причем посылка данных происходит каждые 5 сек через setInterval.

Но это всего лишь пример. Можно и без постоянных обновлений послать запросы.
Вообщем, я показал пример. Ваша задача оклиматизировать его под ваши веб-приложения.

Надеюсь, этот код будет кому-то полезен.

Ответ от сервера должен содержать JavaScript-код который будет выполнен на странице через eval()

Если будете использовать скрипт в ваших проектах желательно сохранять копирайт или хотя бы меня известите.

Работает в MSIE 6.0, FireFox 1.0, Opera 8.01


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Irokez
Дата 19.6.2005, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: нет
Всего: 53



а если у меня имеется форма и требуется послать все поля из этой формы .. мне как, упаковывать все данные в виде строки: name1=value1&name2=value2?

PM   Вверх
Black
Дата 19.6.2005, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 2
Всего: 45



Цитата
а если у меня имеется форма и требуется послать все поля из этой формы .. мне как, упаковывать все данные в виде строки: name1=value1&name2=value2?


Да. Каждому элементу формы можно дать id, затем при нажании на опр. кнопку на которую мы повесим функцию, которая пробежит по всем полям формы.

Код

var name1 = document.getElementById(id).value;


а затем сформируем переменную data

Код

url = 'name.php';
data = 'name1='+name1+'&name2='+name2 и т.д.


затем все данные скормим приведенному выше скрипту.

Код

ReLoad(url,data);





--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Irokez
Дата 19.6.2005, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: нет
Всего: 53



Цитата(PHP @ 19.6.2005, 01:08)
Да. Каждому элементу формы можно дать id, затем при нажании на опр. кнопку на которую мы повесим функцию, которая пробежит по всем полям формы.

не вряд ли smile лучше по-другому получить элементы.. через массив form[]
но вопрос в другом: отправятся ли данные если:
а) много полей
б) большой объем информации, например текст (содержащий переход на новую строку)
PM   Вверх
Black
Дата 19.6.2005, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 2
Всего: 45



Irokez
Цитата
лучше по-другому получить элементы.. через массив form[]

ну это кто во что горазд smile

Цитата
отправятся ли данные если много полей

да отправятся.

Цитата
например текст (содержащий переход на новую строку)

необходимо преобразовать в UTF-8, иначе будут глюки.

Необходимо каждое поле формы пропустить через:
encodeURIComponent(element);

а затем сформировать date где все данные скрепить через &
но не надо саму переменную date пропускать через encodeURIComponent(element);



--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Irokez
Дата 19.6.2005, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: нет
Всего: 53



Цитата(PHP @ 19.6.2005, 01:39)
а затем сформировать date где все данные скрепить через &
но не надо саму переменную date пропускать через encodeURIComponent(element);

т.е. data..
а ошибки 414 too long request не будет? smile
PM   Вверх
Sardar
Дата 19.6.2005, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 16
Всего: 317



Кодом всё сказанное выше:
Код
<form id="test">
<input type="text" name="tt">
<input type="checkbox" name="ch" value="bla bla">
<input type="radio" name="rd" value="r1">
<input type="radio" name="rd" value="r2">
<input type="radio" name="rd" value="r3">

<input type="button" onclick="alert(encodeForm(this.form));" value="test">
</form>
<script type="text/javascript">
<!--
// Скрипт для отправки запросов на сервер без обновления страницы методом POST.
// Author: PHP-DIRECTOR <[email protected]>
// 
// getInputValue and encodeForm by Sardar <[email protected]>
//
// Протестировано в IE 6.0, FireFox 1.0, Opera 8.01
function createRequestObject() {
  if (window.XMLHttpRequest) return new XMLHttpRequest();
  try {
    return new ActiveXObject('Msxml2.XMLHTTP');
  } catch(e) {
    return new ActiveXObject('Microsoft.XMLHTTP');
  }
}

function ReLoad(url ,data) {
 var Req = createRequestObject();
 Req.onreadystatechange = function(){if(Req.readyState==4&&Req.status==200) { alert(Req.responseText); }};
 Req.open('POST',url,true);
 Req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
 Req.send(data);
}

function encodeForm(form) {
  if(!form||!form.elements) throw "encodeForm: error, argument is not a FORM";
  var ret=[], el;
  for(var i=0; i<form.elements.length; i++) {
    el=form.elements[i];
    if("checkboxradio".indexOf(el.type)>=0) {if(el.checked) ret[ret.length]=getInputValue(el);}
    else if(el.type!="button"&&el.type!="submit") ret[ret.length]=getInputValue(el);
  }
  return ret.join("&");
}

function getInputValue(inp) {
  if(typeof(inp.nodeName)=="undefined") { //collection of radio
    for(var i=0; i<inp.length; i++)
      if(inp[i].checked) return (inp[i].name? encodeURIComponent(inp[i]).name+"=":"") + encodeURIComponent(inp[i].value);
    return "";
  }
  if(inp.type=="select-multiple") {
    var ret=[];
    for(var i=0; i<inp.options.length; i++)
      if(inp.options[i].selected) ret[ret.length]=(inp.options[i].name? encodeURIComponent(inp.options[i].name)+"[]=":"")+encodeURIComponent(inp.options[i].value);
    return ret.join("&");
  } else if(inp.type=="select-one")
     return (inp.selectedIndex>=0)?
       ((inp.options[inp.selectedIndex].name? encodeURIComponent(inp.options[inp.selectedIndex].name)+"=":"")+encodeURIComponent(inp.options[inp.selectedIndex].value)) : "";
  if(inp.type=="image") return (inp.name? encodeURIComponent(inp.name)+"=":"")+encodeURIComponent(inp.src);
  else return (inp.name? encodeURIComponent(inp.name)+"=":"")+encodeURIComponent(inp.value);
}

setInterval('ReLoad("name.php",encodeForm(document.getElementById("test")))', 5000);
//-->
</script>

Добавлено @ 02:32
Цитата(Irokez @ 19.6.2005, 01:05)
а ошибки 414 too long request не будет?

Данные постом идут, там хоть мегабайты.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Irokez
Дата 19.6.2005, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: нет
Всего: 53



Sardar то что нужно! спасибо!
PM   Вверх
Burrr
Дата 4.9.2005, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: нет
Всего: 20



Замечательный код. Есть только вопрос насчёт копирайта, о котором говорится в первом посте (я в этой теме не проф, поэтому прошу извинить, если кого-то случайно обидят мои рассуждения).
Насколько я понимаю первый скрипт отличается от обычно-используемого для httpRequest-запросов тем, что в него добавлена строка для Оперы:
var obj = new ActiveXObject('Msxml2.XMLHTTP');
, а также нехитрая функция setInterval().
В чём же такая изюминка этого скрипта, чтобы предупреждать (хоть и желательно) автора об его использовании?
Неужели настолько оригинальная идея?


--------------------
PM MAIL ICQ   Вверх
Aliance
Дата 4.9.2005, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 6
Всего: 137



Burrr
Используй PM --Resize_Images_Alt_Text-- для задания таких вопросов, IMHO.
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 4.9.2005, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 16
Всего: 317



Burrr изначальный код это стандартный, везде описываемый пример, можешь написать "с нуля" сам и поставить свой копирайт smile
Доработанный мной код это уже оригинальная идя. Я придумал и реализовал идею, но это не значит что код накладывает какие либо ограничения на использование. Можешь написать по новой сам, либо взять приведённый код. Во втором случае просто добавь имена и мыло тех, кто работал над кодом, просто из уважения.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Burrr
Дата 5.9.2005, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: нет
Всего: 20



Ясно, спасиба!
Просто интересно было узнать.

Это сообщение отредактировал(а) Burrr - 5.9.2005, 10:07


--------------------
PM MAIL ICQ   Вверх
Guest
Дата 17.11.2005, 14:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











стоп...
что то вы меня запутали

Sardar
а в чем разница между громоздким кодом который описан, у Котерова(JSHttpRequest), твоим JSInteractiveRequest или компактным этим?

кроме метода передачи, разницы не вижу...
и там и там обновление страницы...
  Вверх
Sardar
Дата 18.11.2005, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 16
Всего: 317



Цитата(Guest @ 17.11.2005, 13:43)
а в чем разница между громоздким кодом который описан, у Котерова(JSHttpRequest), твоим JSInteractiveRequest или компактным этим?

В поддержке браузерами. Например мой код не будет работать в Opere 8 и Netscape 8, т.к. те категорически отказываються запускать динамически созданные скрипты, вернее запускают, но аргументы убиваються. Это никак не обходиться, только использованием XMLHttpRequest вместо этого. В либе Котерова как раз такой подход реализован, если есть возможность использовать XMLHttpRequest, то он и используеться, иначе альтернативный способ скриптами.

В коде DIRECTOR используеться только XMLHttpRequest.

Как вывод: либа Котерова вобрала в себя оба подхода тем самым может работать почти везде, хотя плата за это немного разбухшим кодом. Все кто спрашивает динамику, советую именно её, т.к. свою никак не добью, нет времени smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
fregs
Дата 18.11.2005, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 25.11.2004

Репутация: нет
Всего: 1



Sardar
smile добивай свою...
у Котеровской возникает проблема у пользователей ИЕ5... кодировка
PM MAIL WWW   Вверх
Иль
Дата 18.11.2005, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

Репутация: нет
Всего: 14



Код

var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
 try {
  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) {
  try {
   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) {
   xmlhttp = false;
  }
 }
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  xmlhttp = new XMLHttpRequest();
}

Здрасте...
Взято тут http://jibbering.com/2002/4/httprequest.html , только обязателно найдите (на этой же странице) условия копирайта и строжайше им следуйте. Только ищите их хорошо.


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Sardar
Дата 19.11.2005, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 16
Всего: 317



Цитата
Здрасте...

Иль кусочек кода инициализации XMLHttpRequest приводиться в любой статье, накладывать на такой код копирайт, всё равно что накладывать копирайт на:

Код
var a=new Image(); a.src=...

smile

Цитата(fregs @ 18.11.2005, 08:09)
у Котеровской возникает проблема у пользователей ИЕ5... кодировка


fregs oн пошёл по пути раскодирования %uHHHH мнемоник юникода или отключения его вовсе, что приводит к кракозябрам в определённых ситуациях. Я кодирую текст в UTF-8, затем обычним urlencode, что больше по трафику, но надёжней.

Добью не ранее января, ибо работы не мерянно, да и к тому времени "отточиться" техника XMLHttpRequest под Оперой.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
fregs
Дата 24.1.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 25.11.2004

Репутация: нет
Всего: 1



2 Sardar

кстати smile время добить не нашлось?
PM MAIL WWW   Вверх
Sardar
Дата 28.1.2006, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 16
Всего: 317



Цитата(fregs @ 24.1.2006, 12:33 Найти цитируемый пост)
кстати smile время добить не нашлось?

[offtop]
Прямо аврал smile
Ещё сессия, у нас она январь-февраль, сдача проекта и начало стажа. На форум на час прибегаю что бы только мусор почистить, в новичкас уже целая страница где я не был ещё smile

Остро не хватает активного комодератора, не то что софтину дописывать. Юзать я её буду не ранее марта, тогда и возрожу. Пожалуйста используйте JSHttpRequest от Котерова, хороший проверенный софт.
[/offtop]


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Greendrake
Дата 10.2.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 364
Регистрация: 14.7.2005

Репутация: нет
Всего: 6



Кто-нить в курсе как отправить input-поле типа file методом POST через XMLHttpRequest ?
PM MAIL   Вверх
12345c
Дата 10.2.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 2
Всего: 101



Здесь в форуме ряд тем об этом но ни в одной не достигли успеха, пришли к выводу, что не идёт. Но в Mozilla/XUL что-то получилось, судя по теме в http://xpoint.ru/forums/programming/XUL/thread/27174.xhtml


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
Greendrake
Дата 23.3.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 364
Регистрация: 14.7.2005

Репутация: нет
Всего: 6



Цитата(12345c @ 10.2.2006, 13:00)
Здесь в форуме ряд тем об этом но ни в одной не достигли успеха, пришли к выводу, что не идёт.

Увидел что это реализовано на eBay при загрузке изображений. Загружаются без обновления страницы. Работает и в IE, и в Лисе, и в Опере. Буду разбираться как это сделано...
PM MAIL   Вверх
12345c
Дата 23.3.2006, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 2
Всего: 101



Через фреймы, иначе бы не работало.
PM WWW   Вверх
244760100
Дата 26.3.2006, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 21.3.2006

Репутация: нет
Всего: нет



я очень начинающий по JavaScript, и могу покозаться не ламером.....гы.. но будте бодры ответить мне на следующее...>>>
а что нжно изменить в коде (сообщение 1) , что бы он грузил мой файл, который мне нужен? и еще... какие-то там переменные name1, name2 , value1 & value2??? одним словом, мне нужен код чтоб делал все то, что по этой ссылке >> http://forum.vingrad.ru/index.php?act=ST&a...26&unread=1

Это сообщение отредактировал(а) 244760100 - 26.3.2006, 15:19
PM MAIL   Вверх
Aliance
Дата 27.3.2006, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 6
Всего: 137



В работу. Тут не коды пишут, а помогают ВАМ их написать.
PM MAIL WWW ICQ Skype   Вверх
244760100
Дата 27.3.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 21.3.2006

Репутация: нет
Всего: нет



ну значит, если не трудно, помогите....
PM MAIL   Вверх
CyClon
Дата 28.3.2006, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



Афтор, зачОт! Давно меня волновал этот вопрос. Но тут у меня еще несколько-ко вопросов.

Какой код будет для запроса страницы, не отправляю POST. Просто я только вчера начал изучать JS, переделываю скрипт слоев, посему не очень соображаю, особенно в этих новых технологиях ;)

P.S. Не интересуют ответы типо "Ничего не пиши в POST" и т.д. Меня интересует более компактный код.


--------------------
user posted image
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Здесь публикуют скрипты, которые уже проверены в обсуждениях других тем (при этом полезно поставить ссылки на все смежные обсуждения) или переносятся кем-либо из модераторов по просьбе участников, если видно, что в результате обсуждения темы был написан полезный или интересный скрипт. Третий возможный вариант - участник форума публикует скрипт, заведомо известный как полезный и эффективный, для, возможно, небольшой доработки и обсуждения.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Наши скрипты | Следующая тема »


 




[ Время генерации скрипта: 0.0740 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.