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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с Ajax. Проблема с document.getElementById 
:(
    Опции темы
cyberface
Дата 19.7.2006, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть следующий код
Код

var req;  


function loadDoc(url) { 
url = url +'?name=' + document.forms.frm.name.value; 
    // для "родного" XMLHttpRequest 
    if (window.XMLHttpRequest) { 
        req = new XMLHttpRequest(); 
        req.onreadystatechange = processReqChange; 
        req.open("GET", url, true); 
        req.send(null); 
         
    // для версии с ActiveX 
    } else if (window.ActiveXObject) { 
        req = new ActiveXObject("Microsoft.XMLHTTP"); 
        if (req) { 
            req.onreadystatechange = processReqChange; 
            req.open("GET", url, true); 
            req.send(); 
        } 
    } 
} 

function processReqChange() { 
    // только пр состоянии "complete" 

    if (req.readyState == 4) { 
        // для статуса "OK" 
        if (req.status == 200) { 
            // здесь идут всякии штуки с полученным ответом 

            document.getElementById('answer').innerHTML=req.responseText 
        } else { 
            alert("Не удалось получить данные:\n" + 
                req.statusText); 
        } 
    } 
}



Он загружает имя в слой с id=answer.


Код

<div id="answer"> 
--тут появляется ответ-- 
</div>


Все вроде бы работает. Но столкнулся с такой проблемой:
Допустим у меня есть несколько слоев с разным id.

Код

<div id="1"> 
бла бла бла бла бла 
</div> 

<div id="2"> 
бла бла бла бла бла 
</div> 

<div id="3"> 
бла бла бла бла бла 
</div>


Мне хотелось бы на их месте выводить новое содержание, однако, id у всех отличаются. И мне бы хотелось модифицировать верхний JS код таким образом, что можно было бы передать не только УРЛ, но id того элемента, в котором произойдет подгрузка. Все усугубляется тем, что в JavaScript я полный нуль  smile 
Надеюсь на вашу помощь.  

Это сообщение отредактировал(а) cyberface - 19.7.2006, 08:14
PM MAIL   Вверх
Greendrake
Дата 19.7.2006, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Самый простой и тупой путь - перед каждым вызовом loadDoc() присваивать нужный id некой глобальной переменной, скажем divID, и в функции processReqChange() заменить document.getElementById('answer') на document.getElementById(divID). 
PM MAIL   Вверх
cyberface
Дата 19.7.2006, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А как это сделать? 
PM MAIL   Вверх
$tatic
Дата 19.7.2006, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Можно id и через сам ответ передавать:
Код

document.getElementById(req.responseText.substr(0, 5)).innerHTML=req.responseText.substr(5);

В этом случае первые 5 символов строки будут определять id элемента, остальные - его значение. 
PM MAIL   Вверх
cyberface
Дата 19.7.2006, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Работает. Но кривоватенько, к примеру, придется все id начинать с нуля, чтобы у всех элементов в id было одинаковое кол-во букв(например 0001 и 1003). Немного неудобно, хотя работает.  
PM MAIL   Вверх
S.A.P.
Дата 19.7.2006, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



cyberface, 
тогда передавай в формате JSON. Простой пример:
с сервера идёт примерно такая байда:
Код

{id: "div1", text: "bla bla bla"}


на клиенте:
Код

var data = eval('('+responseText+')');
document.getElementById(data.id).innerHTML = data.text; 
 

Это сообщение отредактировал(а) S.A.P. - 19.7.2006, 09:59
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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