powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / поля SELECT и AJAX
20 сообщений из 45, страница 2 из 2
поля SELECT и AJAX
    #35357958
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно, по стартвопросу. При выборе страны (онченж первого селекта) - аппендЧилд скрипта с параметром ...чего_то_там?callbeck=...&strana="выбранная_страна". Коллбек функция - чистит второй селект и вставляет в него (аппендЧилд) данные из парамета коллбека.
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35358062
Фотография yarnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем кто следит за темой и за мной - спасибо! благодаря вашим стараниям и моим мучениям все же что то получилось "родить".
Скажу чесно, тут плагиата на 50% только :-)
Хочу услышать конструктивную критику, замечания, пожелания, наставления.
И вопрос, у меня не получается загнать текст ни в <div id="sity1"> ни в <select id="sity2">

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
<html><head>
<META content="text/html; charset=windows-1251" http-equiv="Content-Type">
<script type="text/javascript">
function loadXMLDoc(params) {
  req = null;
  if (window.XMLHttpRequest) { try { req = new XMLHttpRequest(); }
    catch (e){} } else if (window.ActiveXObject) { try { req = new ActiveXObject('Msxml2.XMLHTTP'); }
    catch (e){ try { req = new ActiveXObject('Microsoft.XMLHTTP'); }
    catch (e){}}}
  if (req) {
    req.onreadystatechange = processReqChange;
    req.open("GET", "list.pl?id=" + params);
    req.send(null);
    reqTimeout = setTimeout("req.abort();",  5000 );
  } else { alert("Браузер не поддерживает AJAX"); }
}

function processReqChange() {
  if (req.readyState ==  4 ) {
    if (req.status ==  200 ) { document.form1.response.value=req.responseText; }
    else { alert("Не удалось получить данные:\n" + req.statusText); }
  }
}
</script>
</head>
<body>
<form name=form1>
Страны <select id='sel' onchange="loadXMLDoc(sel.value);" value="GET">
  <option value="Ukraine" selected>Ukraine</option>
  <option value="USA">USA</option>
  <option value="RUSSIAN">RUSSIAN</option>
</select>

Города <div id="sity1"></div><select id="sity2"></select>

<textarea rows= 6  name=response></textarea>

</body>
</html>
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35358096
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ха-ха - здорово! Только не 50, а 85 процентов. Когда дорастёшь до 95-98% - будешь джедаем. Если хочешь, я в выходные тебе свой примерчик напишу для твоих данных - тебе понравится. Я так понял - на перле пишешь (ну это теперь всё-равно - понятно, как данные получаешь). Если дашь полную ссылку на свой list.pl - дам тебе хтмл-файл, который даже лёжа на рабочем столе будет точно также работать, как и загруженный с сервера (реквест так не умеет!).
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35358119
Фотография yarnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не трудно догадаться что скрипт выдает те6кстовку <option value=$1>$2</option>
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35362803
Фотография yarnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще немного изменений.
Неужели тяжело сказать верно или нет? что подправить, а что оставить...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
<html><head>
<META content="text/html; charset=windows-1251" http-equiv="Content-Type">
<script type="text/javascript">
function loadXMLDoc(params, tag) {
  req = null;
  if (window.XMLHttpRequest) { try { req = new XMLHttpRequest(); }
    catch (e){} } else if (window.ActiveXObject) { try { req = new ActiveXObject('Msxml2.XMLHTTP'); }
    catch (e){ try { req = new ActiveXObject('Microsoft.XMLHTTP'); }
    catch (e){}}}
  if (req) {
    req.open("GET", "test.pl?" + tag + "=" + params);
    req.send(null);
    if (req.readyState ==  4 ) {
      if (req.status ==  200 ) { document.getElementById(tag).innerHTML=req.responseText; }
    }
    reqTimeout = setTimeout("req.abort();",  5000 );
  }
  else { alert("Браузер не поддерживает AJAX"); }
}
</script></head>
<body>
<form>
<table><tr><td>
<select id='count' onchange="loadXMLDoc(this, 'sity');">
  <option>Страна</option>
  <option value="1">Ukraine</option>
  <option value="2">USA</option>
  <option value="3">RUSSIAN</option>
</select>
</td><td id="city">- выбирай тут</td></tr>
<tr><td>
<select id='Area' onchange="loadXMLDoc(this, 'street');">
  <option>Район</option>
  <option value="1">Центр</option>
  <option value="2">Окраина</option>
</select>
</td><td id="street">- и тут</td></tr></table>
<input type="submit"></form>
</body></html>
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35362818
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, создание XMLHttpRequesr надо вынести в отдельную функцию, создавать при загрузке страницы и не создавать при каждом запросе, а пользоваться экземпляром объекта.

Вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  if (req) {
    req.open("GET", "test.pl?" + tag + "=" + params);
    req.send(null);
    if (req.readyState ==  4 ) {
      if (req.status ==  200 ) { document.getElementById(tag).innerHTML=req.responseText; }
    }
    reqTimeout = setTimeout("req.abort();",  5000 );
  }
работать не будет, так как запрос асинхронный и для получения отклика нужен обработчик события onreadystatechange:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
req.open("GET", "test.pl?" + tag + "=" + params);
req.send(null);
req.onreadystatechange = function() {
    if (req.readyState ==  4 ) {
        if (req.status ==  200 ) 
            document.getElementById(tag).innerHTML=req.responseText;
    }
    reqTimeout = setTimeout("req.abort();",  5000 );
}

Практика с innerHTML крайне нежелательна (и непрофессилнальна). Создавай на сервере строку-объект JSON, передавай ее, с помощью eval создавай объект и DOM'ом вставляй в селект. Это наиболее быстрый, удачный, кроссбраузерный и профессиональный подход.

Вариант с прерыванием запроса через setTimeout выглядит просто дилетантским. Во-первых, с сервера можно получить столько объектов, что за 5 секунд их не распарсить и не вставить. А во-вторых, если браузер в течении 5 секунд получил данные и начал их парсить и вставлять, то к функции setTimeout он подойдет только тогда, когда интерпретатор выйдет их процесса парсинга, а не точно через 5 секунд. Так что данное решение плохое. Думаю, проколы с данными надо координировать с сервера, устанавливая какие-то блоки и проверки.

Вот что мне действительно понравилось в твоем коде - это расположение стран. Кул!
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35362980
Фотография yarnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckНу, создание XMLHttpRequesr надо вынести в отдельную функцию, создавать при загрузке страницы и не создавать при каждом запросе, а пользоваться экземпляром объекта.
Начал искать что это за чудо и вот чего нашел:
"Когда-то обращение к функции httpRequest() я делал сразу при загрузке страницы через <body onload="httpRequest()"> и больше не создавал XMLHttpRequest объект. Но как оказалось, это работает для всех браузеров кроме IE, который каждый раз требует создавать новый объект. Поэтому вызов данной функции делается каждый раз перед отправкой данных." (c). Источник http://www.ixbt.com/soft/ajax.shtml

IDVsbruckВариант работать не будет, так как запрос асинхронный и для получения отклика нужен обработчик события onreadystatechange:
Спасибо понял.

IDVsbruckВот что мне действительно понравилось в твоем коде - это расположение стран. Кул!
Как раз это и был плагиат :-))

Остальное еще перевариваю.
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35362987
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если получать данные через JSONP никакого реквеста не надо - статью-то (давал тынц) можно было и прочитать.
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35363023
Фотография yarnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge, на сколько я вижу, уважаемые IDVsbruck и illion почему то не используют этот замечательный метод JSONP.
С чем связано столь малая распространненость и не любовь в узких кругах сего метода?
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35363078
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yarnikShSerge, на сколько я вижу, уважаемые IDVsbruck и illion почему то не используют этот замечательный метод JSONP.
С чем связано столь малая распространненость и не любовь в узких кругах сего метода?
IDVsbruck и illion - это еще не пуп Земли, и Вы вольны использовать то, что считаете более подходящим своей цели :-). Я не использую JSONP, поскольку функции, основанные на XMLHttpRequest, полностью удовлетворяют моим задачам. Да и потом, я работаю только с методом POST, дабы избежать ограничений GET (мне порой приходится передавать на сервер достаточно сложные данные больших объемов).
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35363241
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То же самое ...
Просто не заморачивался с другими способами, но способ JSON with Padding также имеет полное право на жизнь. В моих приложениях надежный источник данных, который я формирую на сервере, а также огромное количество запросов и ответов на/с сервера, поэтому добавлять еще и дополнительные обработчики - это уже занадто ... хотя, возможно, в следующий раз буду реализовывать уже именно такую конструкцию.
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35363880
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот, что имел ввиду (JSONP здесь ни при чём).
1.perl (пардон, лет 5 не писал забыл синтаксис):
Код: plaintext
1.
2.
$s="..."; //формируем на сервере строчку с содержимым селекта
print("myCallback(\'".$s."\'");
2.Теперь яваскрипт:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
//на onchange  1 -го селекта:
function getInnerHtml(){
  var script = document.createElement("script");
  script.src = 'myScript.pl';
  script.type = 'text/javascript';
  document.body.appendChild(script);
}

//и объявить ф-ю myCallback:
[src]
function myCallback(s){
document.getElementById('mySelect').innerHTML=s;
}
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35363891
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПС. Текст явно попроще будет, чем с реквестом или с JSONом. Получать таким образом данные в данном конкретном случае - вполне допустимо. А вот базу апдейтить не следует.
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35364697
Фотография yarnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge,
Как все работает я уже понял, хотя думал что этот метод работает только с форматом JSON
Но в любом случае, как мен кажется, этот метод не позволяет выводить на экран статус запроса.
Допустим в начале запроса и возможно юзеру вывести сообщение "Идет загрузка" и если успешно все прошло убрать ее, но как быть с сообщеними о ошибках?

p.s. Вы не задумывались о написании мануала в Викпедии? :-)

p.p.s. Кстати, где можно почитать как парсить JSON?
Что б быть точнее, как втиснуть результат между тегами <option value=$1>$2</option>
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35364745
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yarnik
p.p.s. Кстати, где можно почитать как парсить JSON?
Что б быть точнее, как втиснуть результат между тегами <option value=$1>$2</option>
Зачем его парсить? - это уже есть ассоциативный массив в жс. - точечная нотация ...
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35364802
Фотография yarnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge yarnik
p.p.s. Кстати, где можно почитать как парсить JSON?
Что б быть точнее, как втиснуть результат между тегами <option value=$1>$2</option>
Зачем его парсить? - это уже есть ассоциативный массив в жс. - точечная нотация ...
К примеру я передаю с сервера:
{
"1": "Москва",
"2": "Питер",
"3": "Киев"
}
или
{
"sity": [ "1", "Москва", "2", "Питер", "3", "Киев" ]
}
Вот как мне с этого сделать строчку "<select name=sity><option value=1>Москва</option><option value=2>Питер</option><option value=3>Киев</option></select>"?
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35365131
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yarnik
К примеру я передаю с сервера:
{
"1": "Москва",
"2": "Питер",
"3": "Киев"
}
Код: plaintext
1.
2.
3.
4.
5.
6.
var req = new XMLHttpRequest...
var respObj = eval("("+req.responseText+")")
var sel = document.createElement("select");
for(var a in respObj){
	sel.add( new Option(resp[a], a) );	
}
document.body.appendChild(sel);
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35365136
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LINUXER
resp[a]

respObj[a]
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35365171
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немножко воображения ...

Передаешь:
{"cities":[{"value":"1","name":"Kiev"},{"value":"2","name":"Warshawa"},{"value":"3","name":"Vienna"}]}
При обработке переводишь в объект:
Код: plaintext
1.
2.
      var cities = eval("(" + request.responseText + ")").cities;
      for (var i in cities)
            document.getElementById("select_id").options.add(new Option(cities.name, cities.value));
Только перед каждой обработкой обнуляй список:
Код: plaintext
      document.getElementById("select_id").options.length =  0 ;
Удобно сразу в "value" вставлять поле id из соответствующей таблицы базы данных, где хранятся города (и соответственно при запросе делать Ordering).
...
Рейтинг: 0 / 0
поля SELECT и AJAX
    #35365177
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О! Меня уже опередили ...
...
Рейтинг: 0 / 0
20 сообщений из 45, страница 2 из 2
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / поля SELECT и AJAX
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]