Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Помогите принять решение.. / 21 сообщений из 21, страница 1 из 1
21.05.2008, 17:21
    #35326842
Zhenek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
Мне вот что нужно:

Есть два селекта.

В первом Страну а при выборе страны во втором появляются города для этой страны.
Нехочется делать в базе,файле и т.д

нужно напрямую поместить в код.. как это сделать? Очень нужно..

Заранее спасибо всем..
...
Рейтинг: 0 / 0
21.05.2008, 17:54
    #35326989
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
Zhenekнужно напрямую поместить в код.. как это сделать?
В какой код HTML, серверный код?
Если HTML, то пробежаться по всем option'ам и проставить им свойство style.display. Но ты представляешь какое счастье получит клиент, получив города по всему миру?

А чем не устраивают отдельные файлы на сервере? Имхо самое красивое и читабельное, не считая БД
...
Рейтинг: 0 / 0
21.05.2008, 17:57
    #35327003
Zhenek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
Да я вот незнаю как реализовать файлы на серваке..
с ajax незнаком как и javascript (( тока php
...
Рейтинг: 0 / 0
21.05.2008, 17:57
    #35327004
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
Кстати, повод XmlHttpRequest заюзать. Я б так и сделал.
...
Рейтинг: 0 / 0
21.05.2008, 18:37
    #35327118
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
Да, тут тебе однозначно AJAX нужен

С уважением, Vasilisk
...
Рейтинг: 0 / 0
21.05.2008, 18:42
    #35327136
Zhenek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
да.. вот сижу с аяксом разбираюсь...

Щас только пытаюсь сделать кнопку напротив ввода логина на проверку занятости и свободности... Пока чужой код для этих целей приспособил..

Меня камнем тянет вниз незнание javascript
...
Рейтинг: 0 / 0
21.05.2008, 20:14
    #35327305
Zhenek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
Появился вопросик...

Все я получил данные..
Вот как я их вывожу :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
        if (req.status ==  200 ) {
           
			document.feedback.stat.value=req.responseText;
	
        } else {
            document.feedback.stat.value=("ERROR");
        }


тоесть они помещаются в <inpute а как мне их просто словом поместить.. просто текстом.
пробовал document.write("") выдается только на чистом листе.Все очищает и только переданное значение.

P.Sпередает два варианта Свободен или занят

Прошу помочь.. заранее спасибо всем..
...
Рейтинг: 0 / 0
21.05.2008, 20:39
    #35327336
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<div id="response"></id>
............................
if (req.readyState ==  4 ) {
  var lElem = document.getElementById('response');
  if (req.status ==  200 )
    lElem.innerText = req.responseText;
  else
    lElem.innerText = 'ERROR';
}

С уважением, Vasilisk
...
Рейтинг: 0 / 0
22.05.2008, 01:09
    #35327491
illion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
innerText свойство нестандартное и поддерживается не всеми браузерами. Например, ФФ его не знает.
...
Рейтинг: 0 / 0
22.05.2008, 02:29
    #35327512
apapacy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
Более того. innerHTML так же как и inner/outerText и outerHTML присутсвует только в одной спецификации - DHTML от Microsoft (т.е. нам доступно через MSDN и есть в каких-то внутренних стандартах MS). То есть в соответствии со стандартами w3c (DOM 1-2-3) для серьезных приложений, видимо, следует признать использование только методов DOM (createElement ...)
...
Рейтинг: 0 / 0
22.05.2008, 02:40
    #35327517
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
О! Снова моя любимая тема :)
Идеальный вариант, конечно, - AJAX. На сервере делаешь выборку и кидаешь клиенту.
Вариантов несколько: кодировать в строку с разделителями и парсить ее у клиента, создавать xml и парсить у клиента, или создавать json-структуру и с помощью eval воспроизводить объект у клиента. Сразу скажу - третий вариант с офигенным превосходством опережает остальные, xml на втором месте, ну и первый способ - на последнем (split очень медленно работает). По объему передаваемой информации первый и третий способы примерно одинаковы, xml из-за своей структры тащит кучу "мусора". По парсингу третий самый быстрый, как уже говорил, но он и первый способы "подвешивают" систему, так как сначала создается структура, способ же с xml по не очень понятной мне причине систему не подвешивает и парсинг осуществляется параллельно с вставкой полей в селект.
Вывод: однозначное использование json - просто, быстро, надежно и удобно.
Ни в коем случае не создавать куски кода на сервере с последующей вставкой посредством innerHTML в код - это хуже, это неправильно, это медленно, это не кроссбраузерно ... не подходит, крутые ребята так не делают :).

Приведу свой пример. правда, у меня чуть более сложный вариант: есть провинции (Канада), а также критерий, по которому нужно делать выборку (все города, все населенные пункты, все по населению, все по рейтингу н/п, все по типу н/п), а также возможный второй критерий (население в диапазоне, тип н/п, диапазон рейтинга н/п и т.д.) В зависимости от введенных данных показывается список городов, причем в нужном порядке (алфавит, население, рейтинг), а также количество в заголовке.

Код html (стили обрезал, так что что-то может потеряться):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<tr><td>
	province: <select id="province"><option value="1">Alberta<option value="2">British Columbia<option value="3">Manitoba<option value="4">New Brunswick<option value="5">Newfoundland and Labrador<option value="6">Northwest territories<option value="7">Nova Scotia<option value="8">Nunavut<option value="9" selected>Ontario<option value="10">Prince Edward Island<option value="11">Quebec<option value="12">Saskatchewan<option value="13">Yukon Territory</select>
</td></tr>
<tr><td>
	criteria1: <select id="criteria1"><option value="all_cities">all cities and towns only<option value="all_settlements">all settlements in province<option value="division">   ... by divisions<option value="national_rank">   ... by national rank (by SGC  2006 )<option value="population" selected>   ... by population<option value="types">   ... by type of settlement</select>
</td></tr>
<tr><td>
	criteria1: <select id="criteria2"></select>
</td></tr>
<tr><td>
	<{container} id="header_city">city:</{container}><select id="city"></select>
</td></tr>

И javascript, который с этим работает:
Код: 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.
document.getElementById("province").onchange = updateProvince;
document.getElementById("criteria1").onchange = updateProvince;
document.getElementById("criteria2").onchange = updateCriteria;

function updateCriteria() {
	request.open("POST", {myURL} + "?action=cities&province=" + document.getElementById("province").value + "&criteria1=" + document.getElementById("criteria1").value + "&criteria2=" + document.getElementById("criteria2").value + "&rand=" + Math.random(), true);
	request.onreadystatechange = function() {
		if (request.readyState ==  4 ) {
			document.getElementById("city").options.length =  0 ;
			var values = eval("(" + request.responseText + ")");
			for (var i in values.cities)
				document.getElementById("city").options.add(new Option(values.cities[i].text, values.cities[i].value));
			document.getElementById("header_city").innerHTML = "city" + (values.cities.length ==  0  ? "" : (" <font style=\"color: #ff0000; font-size: 7pt;\">(" + (values.cities.length -  1 ) + ")</font>")) + ":";
		}
	};
	request.send(null);
}
function updateProvince() {
	request.open("POST", {myURL} + "?action=criteria&province=" + document.getElementById("province").value + "&criteria1=" + document.getElementById("criteria1").value + "&rand=" + Math.random(), true);
	request.onreadystatechange = function() {
		if (request.readyState ==  4 ) {
			document.getElementById("criteria2").options.length =  0 ;
			var values = eval("(" + request.responseText + ")");
			for (var i in values.criterias)
				document.getElementById("criteria2").options.add(new Option(values.criterias[i].text, values.criterias[i].value));
			document.getElementById("criteria2").selectedIndex =  0 ;
			updateCriteria();
		}
	};
	request.send(null);
}
updateProvince();

Города получаю в виде:
{"cities":[{"value":12890,"text":"Toronto"},{"value":5682,"text":"Saskatoon"}]} и т.д.

Бекэнд не привожу, так как он у меня на Java, а в нем работает гораздо меньше людей, чем, к примеру, в ПэХаПэ. Но суть та же: получил запрос, обработал входящие параметры, сделал по ним запрос в БД, получил коллекцию и ее перегнал в строку, которую отправляю обратно. Все просто и доступно.

Если не нужно так сложно, можно сильно урезать, но я так оставил, чтобы видно было, как можно сделать, к примеру, выбор не только страна-город, но и, к примеру, страна-штат/провинция/округ/область-нас.пункт, когда изменение параметра в верхней части иерархии влечет за собой изменение всей "нижней" информации.
Кроме этого, зачастую приходится делать не просто выбор города из списка, а выбор списка городов по первым буквам (мне пришлось делать такую структуру для америкосов, когда в базе было около 160 тысяч городов и обработку вставки списка приходилось ждать до минуты, а по первым буквам это делалось гораздо быстрее).
...
Рейтинг: 0 / 0
22.05.2008, 02:41
    #35327519
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
Извините за формат, забыл, что код не переносится ... :(
...
Рейтинг: 0 / 0
22.05.2008, 03:59
    #35327527
Zhenek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
Ув IDVsbruck чето я с кодом не разобрался.. Да и такая сложная реализация мне ненужна..
Мнеб просто страна - города...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<div id="response"></id>
............................
if (req.readyState ==  4 ) {
  var lElem = document.getElementById('response');
  if (req.status ==  200 )
    lElem.innerText = req.responseText;
  else
    lElem.innerText = 'ERROR';
}

Вот. это то что мне нужно,но только бы чтоб и ФФ работало... им очень много народу пользуется...
...
Рейтинг: 0 / 0
22.05.2008, 04:55
    #35327533
illion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
apapacyБолее того. innerHTML так же как и inner/outerText и outerHTML присутсвует только в одной спецификации - DHTML от Microsoft (т.е. нам доступно через MSDN и есть в каких-то внутренних стандартах MS). То есть в соответствии со стандартами w3c (DOM 1-2-3) для серьезных приложений, видимо, следует признать использование только методов DOM (createElement ...)
В спецификациях DOM действительно innerHTML для HTMLElement не упоминается. Порылась в книжке господина Флэнагана по js. Об innerHTML: "Это нестандартное свойство изначально появилось в IE4. Ныне оно реализовано во всех современных броузерах". Верить-то я ему верю (больно уж книжка хороша), осталось только догадаться, что есть "современные броузеры". Все-таки отказ от innerHTML в приложении иногда чрезвычайно неудобен.

Zhenek
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<div id="response"></id>
............................
if (req.readyState ==  4 ) {
  var lElem = document.getElementById('response');
  if (req.status ==  200 )
    lElem.innerText = req.responseText;
  else
    lElem.innerText = 'ERROR';
}
Вот. это то что мне нужно,но только бы чтоб и ФФ работало... им очень много народу пользуется...
а зачем Вам вообще innerText, Вам же селект нужен. Возвращайте аяксом строку типа "['Москва','Питер','Урюпинск']". Затем можно тем же самым eval'ом ее обработать и на основе полученного массива создать селект. Можно сделать совсем по-тупому - вернуть с сервера не массив, а уже готовую строку типа "<select><option value='Москва'>Москва</option>...</select>", а потом просто запихать ее в innerHTML какого-нибудь дива.
...
Рейтинг: 0 / 0
22.05.2008, 05:31
    #35327545
Zhenek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
Код: plaintext
а зачем Вам вообще innerText, Вам же селект нужен

Не.. как я описал выше,это немного для другово.
Просто появилась необходимость вывести полученный от аякса текст.
...
Рейтинг: 0 / 0
22.05.2008, 08:49
    #35327575
illion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
ну так и выводите, только не в innerText, а в innerHTML. Если в тексте есть хтмл-теги, то замените < и > на &lt; и &gt;.
Код: plaintext
1.
document.getElementById('ид_элемента').innerHTML = req.responseText.replace(/</g, '&lt;').replace(/>/g, '&gt;');
...
Рейтинг: 0 / 0
22.05.2008, 10:43
    #35327633
ZeusTheTrueGod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
Автору -учи джаваскрипт, напиши самодельный загрузчик, а потом возьми готовую библиотеку, и сделай на ней
...
Рейтинг: 0 / 0
05.06.2008, 15:36
    #35357035
yarnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
IDVsbruckО! Снова моя любимая тема :)

не работает пример...
...
Рейтинг: 0 / 0
05.06.2008, 23:12
    #35358074
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
А у меня уже в двух проектах работает. Я не сделал копипаст из проекта, а вытащил основную "концепцию". Дорабатывать надо самому ...
...
Рейтинг: 0 / 0
12.06.2008, 16:45
    #35371474
vned
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
Код: 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.
function readResponse()
{
  //получить текст ответа
  var response=xmlHttp.responseText;
  if(response.indexOf("ERRNO")>= 0 
     ||response.indexOf("error:")>= 0 
     ||response.length== 0 )
    throw(response.length== 0 ?"Server error.":response);
  //получить ответ в формате XML
  responseXML=xmlHttp.responseXML;
  xmlDoc=responseXML.documentElement;
  result=xmlDoc.getElementsByTagName("result")[ 0 ].firstChild.data;

      my_doc=document.getElementById("selCity");
       my_doc.options[ 0 ].text="--Select City--";
        my_doc.options[ 0 ].value="--Select City--";
   }

   while(my_doc.options.length> 1 )//уберем лишние города
   {
     //немного кода для кросбраузерности
     if(my_doc.options && my_doc.options.remove)
        my_doc.options.remove( 1 );
     else if(my_doc.remove)
        my_doc.remove( 1 );
     else my_doc.options[ 1 ]=null;
   }
  //добавим новые
  
  
  for(var i= 0 ;i<xmlDoc.getElementsByTagName("result").length;i++){
        result=xmlDoc.getElementsByTagName("result")[i].firstChild.data;
        my_doc.options.length++;
        my_doc.options[i+ 1 ].text=result;
        my_doc.options[i+ 1 ].value=result;
  }

В примере опущено передача параметров на сервер. Получаем XML документ с полями "result"
проверено на ослике и ФФ. Вносим данные в селект с ID "selCity"
...
Рейтинг: 0 / 0
12.06.2008, 17:49
    #35371564
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите принять решение..
Ответ клиенту в XML - это самый долгий и неудобный способ, это уже сто раз обсуждалось. Создать xml, отправить с кучей "воды", потом распарсить и только тогда использовать - это слишком дорого и долго. Идеально для этих целей подходит JSON (хотя есть крохотные ограничения).
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Помогите принять решение.. / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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