Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вопрос про Ajax

19K
04 августа 2006 года
mitya321
2 / / 04.08.2006
Добрый день!

Недавно начал постигать азы ajax'а, и не могу найти ответ на следующий
вопрос. Буду очень благодарен за помощь.

Допустим, есть HTML-страница следующей структуры:

<script>
getData(url){
req = new XMLHttpRequest();
req.onreadystatechange = processStateChange;
try {
req.open("GET", url, true);
} catch (e) {
alert(e);
}
}

function processStateChange() {
if (req.readyState == 4) { // Complete
if (req.status == 200) { // OK response
document.getElementById("!!!XXX!!!").innerHTML = req.responseText;
} else {
alert("Problem: " + req.statusText);
}
}
}
</script>

<a href="h1" onClick="getData(h1)">текст1</a> <span id="i1"></span>
<a href="h2" onClick="getData(h2)">текст2</a> <span id="i2"></span>
<a href="h3" onClick="getData(h3)">текст3</a> <span id="i3"></span>


В ответ на кликанье по ссылке нужно на место рядом стоящего span'а
поместить ответ сервера.

Как обработчику processStateChange указать, какой именно span (i1, i2, i3)
нужно обновить? Чтобы не писать три обработчика, отличающихся только одним
параметром -- id обновляемого span'a?


Заранее спасибо.
12
04 августа 2006 года
alekciy
3.0K / / 13.12.2005
[QUOTE=mitya321]
Как обработчику processStateChange указать, какой именно span (i1, i2, i3)
нужно обновить? Чтобы не писать три обработчика, отличающихся только одним
[/QUOTE]
Что-то в духе:
Код:
<script>
getData(url,el_id){
req = new XMLHttpRequest();
req.onreadystatechange = processStateChange(el_id);
try {
req.open("GET", url, true);
} catch (e) {
alert(e);
}
}

function processStateChange(id) {
if (req.readyState == 4) { // Complete
if (req.status == 200) { // OK response
document.getElementById(id).innerHTML = req.responseText;
} else {
alert("Problem: " + req.statusText);
}
}
}
</script>

<a href="h1" &#111;&#110;Click="getData('h1','i1')">текст1</a> <span id="i1"></span>
<a href="h2" &#111;&#110;Click="getData('h1','i2')">текст2</a> <span id="i2"></span>
<a href="h3" &#111;&#110;Click="getData('h1','i3')">текст3</a> <span id="i3"></span>


Спецификация по Ajax еще пишется, т.е. по сути это все еще эксперимент. Так стоит ли лезть в эту технологию? Не лучше ли заняться изучение JavaScript? ;)
19K
05 августа 2006 года
mitya321
2 / / 04.08.2006
[QUOTE=alekciy]Что-то в духе:
Код:
<script>
getData(url,el_id){
req = new XMLHttpRequest();
req.onreadystatechange = processStateChange(el_id);
try {
req.open("GET", url, true);
} catch (e) {
alert(e);
}
}

function processStateChange(id) {
if (req.readyState == 4) { // Complete
if (req.status == 200) { // OK response
document.getElementById(id).innerHTML = req.responseText;
} else {
alert("Problem: " + req.statusText);
}
}
}
</script>

<a href="h1" &#111;&#110;Click="getData('h1','i1')">текст1</a> <span id="i1"></span>
<a href="h2" &#111;&#110;Click="getData('h1','i2')">текст2</a> <span id="i2"></span>
<a href="h3" &#111;&#110;Click="getData('h1','i3')">текст3</a> <span id="i3"></span>


Спецификация по Ajax еще пишется, т.е. по сути это все еще эксперимент. Так стоит ли лезть в эту технологию? Не лучше ли заняться изучение JavaScript? ;)[/QUOTE]


К сожалению это не работает...
Похоже что функция-обработчик события (в данном случае processStateChange()) не может иметь параметров :-(((

Какие еще могут быть варианты?
12
05 августа 2006 года
alekciy
3.0K / / 13.12.2005
Да, было такое дело, не получалось в нее передавать параметры. Но я тестировал передачу параметров в функцию, и работает! Работает точно в:
Opera 9.01, FireFox 1.5, Avant 9.02 (довольно старая версия).

Так что работать должно, у меня ведь работает.
7.8K
17 мая 2007 года
Tingo
201 / / 17.05.2007
Вместо:
req.onreadystatechange = processStateChange(el_id);

Попробуй:
req.onreadystatechange = function(){processStateChange(reg,el_id)};

а:
function processStateChange(id) { ......

замени на:
function processStateChange(reg,id) { .....

у меня так пашет;)
12
18 мая 2007 года
alekciy
3.0K / / 13.12.2005
Можно еще через глобальную зону видимости передать. Т.е. создав переменную в глобальной зоне видимости которую потом в функции и использовать:
Код:
<script>
var el_id;
getData(url,id){
el_id = id;
req = new XMLHttpRequest();
req.onreadystatechange = processStateChange();
...
function processStateChange() {
if (req.readyState == 4) { // Complete
if (req.status == 200) { // OK response
document.getElementById(el_id).innerHTML = req.responseText;
....
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог