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

Фотография

Вопрос по AJAXнаверное...


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

#1
Высший Разум

Высший Разум
  • Завсегдатай
  • 130 сообщений
Вот нужно менюшку такую сделать - после выбора в первом ниспадающем меню нужно во втором поставить соответствующие значения. Например в первом - страна, а во втором город, находящийся в этой стране. видел такое при регистрации на vkontakte.ru Недавно изучил РНР , буду изучать теперь js и xml однако с сайтом тянуть уже нельзя - надо побыстрей его закончить. Поэтому люди добрые и умные, помогите пожалуйста бедному начинающему вебмастеру :idea:
  • 0

#2
kornel

kornel
  • В доску свой
  • 9 069 сообщений
Вот пример. Переделывайте под себя.
  • 0

#3
Afterglow

Afterglow

    Он же Infection

  • Забанен
  • 192 сообщений
xml не обязательно, легче возвращать готовую переменную и потом ее эвалить.

это так, для начинающих )))

на самом деле просто, аяксов лезете на определенную страницу, она генерит текстовик далее этот текстовик обрабатываете и генерите html код

вроде ничего сложного

#4
Afterglow

Afterglow

    Он же Infection

  • Забанен
  • 192 сообщений
вот конкретный пример под ваш случай :idea:

#5
T. Anre

T. Anre

    Data Miner

  • В доску свой
  • 2 327 сообщений
ИМХО, удобнее всего работать через JSON.
  • 0

#6
Высший Разум

Высший Разум
  • Завсегдатай
  • 130 сообщений
2 Kornel:
Спасибо :D
2 Afterglow
Чет я ничего не понял. Вы учтите что я пока javascript не знаю. :-) А ссылочка то ничем не может нам помочь, потому как в исходнике не скрипт, а другая ссылочка на файл скрипта.
  • 0

#7
La Villa

La Villa
  • Гость
  • 9 сообщений
Высший Разум

вариантов есть несколько. но, в первую очередь, советую вам целиком и полностью отказаться от использования евалов, как кое-кто в этой теме посоветовал.

итак, проблему можно решить следующим образом:

1) при генерации страницы - генерить Жабаскрипт объект состоящий из двух массивов:
первый массив - ID страны и ее название
второй массив - индекс каждого элемента массива соответствует ID страны, а непосредственно элемент массива - массив пар ID города + его название

на событие onChange выпадающего списка с названиями стран крепится изменение списка городов

один из минусов данного варианта - городов в Мире достаточно много и сразу грузить весь список довольно "тяжело"

2) копать в сторону jQuery. Используя эту библиотеку можно значительно ускорить разработку кросс-браузерных приложений. В сети существует достаточное число готовых скриптов для решения самых разнообразных задач
  • 0

#8
ProtoTeeP

ProtoTeeP
  • Завсегдатай
  • 100 сообщений
ну... нафиг все страны? =) их больше 100... раздели их по континентам... европа, африка и т.д. =)

или сделай топ20 (10) - стран где больше всего зарегистрировано.. + "другие страны" если не будет в списке юзер выберет ее, там уже все остальные страны
  • 0

#9
Высший Разум

Высший Разум
  • Завсегдатай
  • 130 сообщений

городов в Мире достаточно много и сразу грузить весь список довольно "тяжело"

согласен :)

или сделай топ20 (10) - стран где больше всего зарегистрировано.. + "другие страны" если не будет в списке юзер выберет ее, там уже все остальные страны

Мне это не для регистрации пользователей.
Вобщем оказалось что ajax это такая простая вещь :laugh:
просто очень страшное это слово - xmlhttprequest. Менюшку я сделал, а вот появилась другая проблема. Когда выбрано значение в первом меню, пользователь пока ждет вторую, ничего не видит. То есть должно быть какое нибудь анимация чтобы посетитель знал что это не тупик, а загрузка...
Я уже говорил что в js не очень, попробовал вот это
function loading()
{
if (xmlHttp.readyState>0 && xmlHttp.readyState<4
 {
 document.getElementById("goroda").write="loading..."
 }
}
не получилось. Что посоветуете? В коде я хотел писать текст loading пока данные не пришли с сервера. Еще лучше было бы конечно анимированное изображение вставить, и оно у меня даже есть, только не знаю как вставить.

ну... нафиг все страны? =) их больше 100...

Их больше 200 :super:
  • 0

#10
Высший Разум

Высший Разум
  • Завсегдатай
  • 130 сообщений
вот сделал менюшку ajax'ом. А теперь другая проблема. в ie все ок. А вот в опере и фф - выпадающее меню не передает значения. то есть само меню нормально показывается и значения для него из базы данных извлекаюься, однако при переходе на следующую страницу переходят все данные, кроме сгенерированных аяксом.
код Javascript
var xmlHttp
function showSubctg(str)
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
 {
 alert ("Browser doesnt support ajax")
 return
 }
var url="goroda.php"
url=url+"?strany="+str
url=url+"&goroda="
var strany = document.getElementById("strany").value;
xmlHttp.open("GET",url + escape(strany),true)
xmlHttp.onreadystatechange=stateChanged
xmlHttp.send(null)
}
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
 {
 document.getElementById("goroda").innerHTML=xmlHttp.responseText
 }
}


function GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 //Internet Explorer
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }

return xmlHttp;

}




вот пхп
код PHP
<?php
require_once("db.php");
$strany=$_GET["strany"];
$sql="SELECT * FROM geo WHERE strany = '".$strany."'";
$result = mysql_query($sql);
echo "<select name=goroda>";
while($row = mysql_fetch_array($result)) {
	echo "<option value=$row[goroda]>$row[goroda]</option>";
	}
echo "</select>";
?>



Вопрос:
что не так с совместимостью с фф и оперой? :rolleyes:
  • 0

#11
Afterglow

Afterglow

    Он же Infection

  • Забанен
  • 192 сообщений
getElementById - поддержка не во всех браузерах

#12
T. Anre

T. Anre

    Data Miner

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

getElementById - поддержка не во всех браузерах

Возможно, но только не в основных браузерах.


<html>
<head>
<script>
function testGetElementById()
{
	alert(document.getElementById('tst').value);
}
</script>

</head>
<body onload="testGetElementById()">
<input id="tst" type="hidden" value="getElementById works"/>

</body>

</html>

  • 0

#13
Afterglow

Afterglow

    Он же Infection

  • Забанен
  • 192 сообщений
как вариант, чтобы избавиться от кроссплатформенных проблем,
советую использовать

http://www.prototypejs.org

а в будущем можно и YUI использовать.

#14
Afterglow

Afterglow

    Он же Infection

  • Забанен
  • 192 сообщений

Возможно, но только не в основных браузерах.


имелось в виду, что в одних используется

document.all.getElementById
и в других
document.getElementById

давно забыл о таких проблемах, так как использую фреймворки

#15
T. Anre

T. Anre

    Data Miner

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

как вариант, чтобы избавиться от кроссплатформенных проблем,
советую использовать

http://www.prototypejs.org

Хорошая идея, сразу же отбивает желание программировать велосипеды.

а в будущем можно и YUI использовать.

ИМХО, YUI ф топку

имелось в виду, что в одних используется

document.all.getElementById
и в других
document.getElementById

Пример?
  • 0

#16
Afterglow

Afterglow

    Он же Infection

  • Забанен
  • 192 сообщений

ИМХО, YUI ф топку


ну как вариант http://script.aculo.us

Пример? Вот убей не помню где как и что, использую prototype и не заморачиваюсь

#17
T. Anre

T. Anre

    Data Miner

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


ИМХО, YUI ф топку


ну как вариант http://script.aculo.us

Очень хорошая библиотека.
  • 0

#18
Darx

Darx
  • Завсегдатай
  • 147 сообщений
Юзай xajax
http://wiki.xajaxpro...t.org/Ру%...?ут
  • 0

#19
Высший Разум

Высший Разум
  • Завсегдатай
  • 130 сообщений
что-то я не пойму как пользоваться prototype'ом :)
  • 0

#20
Afterglow

Afterglow

    Он же Infection

  • Забанен
  • 192 сообщений
а что конкретно не понятно?


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

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

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

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