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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AJAX: Не обновляется div 
V
    Опции темы
ursula16
Дата 11.9.2007, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый вечер.. В общем есть меню с возможностью добавлять в него новые пункты. Меню выводится из мускула через пхп-скрипт. Пхп скрипт загружается через AJAX. Первый раз функция вывода разделов меню вызывается при загрузки странички
Код

<div id=menu><script language='javascript' type='text/javascript'>getMenu();</script></div>

С помощью ajax выводится форма для ввода нового раздела меню. Вот код:
Код

function addrazdel() {
   var name = document.getElementById("name").value;
   var url = "addrazdel.php?name=" + escape(name);
   request.open("GET", url, true);
   request.onreadystatechange = update3;
   request.send(null);
}

function update3() {
     if (request.readyState == 4)
       if (request.status == 200) {
         var Div = document.getElementById("menu");
         Div.innerHTML = "";
         document.getElementById("mainblock").innerHTML="element uspewno dobavlen";
       }
       else if (request.status == 404)
         alert("Request URL does not exist");
       else
         alert("Error: status code is " + request.status);
       getMenu(); // Здесь я пытаюсь обновить меню
}

В обшем все работает, но вот когда я повторно вызываю функцию getMenu() из update3 для обновления меню после добавления нового раздела,то он выводит новый раздел не сразу,а только после нажатия refresh в браузере. То есть я сначала удаляю старое содержимое div-а 
Код

var Div = document.getElementById("menu");
         Div.innerHTML = "";
 а затем пытаюсь обновить через повторный вызов getMenu(); Я вот думаю, может неправильно div обновляю?  smile Спасибо, если кто что подскажет. 
PM MAIL   Вверх
dsCode
Дата 11.9.2007, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 565
Регистрация: 8.9.2007
Где: Saint-Petersburg

Репутация: 19
Всего: 26



ursula16, самый интересный код и не написали =) Где код getMenu()?. А вообще, в update3() у Вас вызов getMenu() будет происходить постоянно при смене любого статуса. Расставьте скобки! Даже, если в блоке один оператор, по правилам хорошего тона и профессионального почерка его нужно заключать в блочные скобки { и }. И тогда увидите, что getMenu() вызывается постоянно в update3().


--------------------
the .code inside
:my music
PM MAIL WWW ICQ Jabber   Вверх
ursula16
Дата 11.9.2007, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



dsCode, скобки уже расставлены,спасибо... ) Ну в общем вот JS код getMenu
Код

function getMenu()
{
   var url = "getMenu.php";
   request.open("GET", url, true);
   request.onreadystatechange = updatePageGetMenu;
   request.send(null);
}

function updatePageGetMenu() {
     if (request.readyState == 4)
       if (request.status == 200)
         document.getElementById("menu").innerHTML=request.responseText;
       else if (request.status == 404)
         alert("Request URL does not exist");
       else
         alert("Error: status code is " + request.status);

А вот код пхп скрипта,который собственно выводит разделы меню из базы,хотя наверное не в нем дело ) 
Код

<?php
   header("Content-Type: text/html;charset=windows-1251"); 
   include("config.php");
   mysql_query("SET NAMES cp1251");
   echo "<a href='#' onClick='addrazdelform();'>Добавить раздел</a><br>";

   $query = "SELECT * FROM menu";
   $result = mysql_query($query);
   while($menu = mysql_fetch_array($result))
      echo $menu['name']."<br>";
?>


Добавлено через 4 минуты и 42 секунды
Опс обнаружена закономерность, добавленный раздел выводится только после того как скопировать ссылку и запустить его с нового окна... Так что видимо повторный вызов getMenu все же не осуществляется... И в чем ошибка?  smile  smile 
PM MAIL   Вверх
Burrr
Дата 11.9.2007, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 10
Всего: 20



ursula16, бывает, что ответы кешируются, рекомендую добавить рандомный параметр в запрос:
Код
function getMenu()
{
   var url = "getMenu.php?rand=" + parseInt(Math.random() * 10e9);
   request.open("GET", url, true);
   request.onreadystatechange = updatePageGetMenu;
   request.send(null);
}

+ добавить еще один header в php-скрипт:
Код
header("Cache-Control: no-store, no-cache, must-revalidate");

Как-то так...


--------------------
PM MAIL ICQ   Вверх
ursula16
Дата 12.9.2007, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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


 




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


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

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