Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.12.2008, 09:21
Новичок на форуме
Отправить личное сообщение для Raynor Посмотреть профиль Найти все сообщения от Raynor
 
Регистрация: 13.12.2008
Сообщений: 5

Неверный результат в AJAX с получением HTML
AJAX пока использую нечасто, но в одном заказе пришлось заюзать активно.
Столкнулся с проблемой при передаче HTML данных (c JS-данными такой проблемы не возникло!).
При первом вызове возвращается undefined результат, при втором - первый, при третьем - второй и т.д., то есть запрос уже новый, а ответ старый
Используется старенькая либа Simple AJAX Code-Kit (SACK) v1.6.1, не мой выбор, что есть, то есть.
Возможно, это её бок, возможно, я что-то упускаю при передаче HTML данных (может быть, HTTP заголовки или настройки PHP).
Разумеется, при прямом вызове скрипта всё отображается как надо.
Есть идеи, как решить проблему? Спасибо.

Код:
function updateList(obj)
{
   ajax.requestFile = '/ajax/ajaxShowList?topic=' + obj.value;
   ajax.runAJAX();
   document.getElementById('list').innerHTML = ajax.response;
}
...
<div id="list">
<script>
   updateSeitenList(document.getElementById('topics'));
</script>
</div>
...
<select name='topics' id='topics' onChange=\"updateList(this)\">...</select>
...
Ответить с цитированием
  #2 (permalink)  
Старый 17.12.2008, 18:05
Кандидат Javascript-наук
Отправить личное сообщение для vk65535 Посмотреть профиль Найти все сообщения от vk65535
 
Регистрация: 21.11.2008
Сообщений: 114

Ajax-запрос синхронный? Наверняка нет. А значит ответ приходит не сразу, поэтому при первом вызове его и нет, а при всех последующих вы получаете результат предыдущего. С этой либой никогда не работал, но наверняка там должен быть механизм, вызывающий юзер-функцию сразу после того, как от сервера пришел результат запроса. Кстати, в случае ошибки, результата может и не быть, и это тоже желательно предусматривать.

Последний раз редактировалось vk65535, 17.12.2008 в 18:12.
Ответить с цитированием
  #3 (permalink)  
Старый 17.12.2008, 18:14
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Проблема здесь:
ajax.runAJAX();
   document.getElementById('list').innerHTML = ajax.response;

Вы присваиваете innerHTML'у ответ от сервера в тот момент, когда он еще выполняется (если конечно, как сказал vk65535, запрос не синхронный), при повторном вызове результат берется из кэша, поэтому все срабатывает.
В используемой вами библиотеке должен быть способ задать callback-функцию, которая сработает после того, как AJAX-запрос выполнится.
Ответить с цитированием
  #4 (permalink)  
Старый 17.12.2008, 18:38
Новичок на форуме
Отправить личное сообщение для Raynor Посмотреть профиль Найти все сообщения от Raynor
 
Регистрация: 13.12.2008
Сообщений: 5

Спасибо!
Большое спасибо, вы оба правы.
Да, есть там callback-функции, с ними всё получилось.

Код:
ajax.onCompletion = ....
ajax.runAJAX();
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск