Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обработка сценария php средствами javascript или ajax.
 
 автор: InfernuS   (18.12.2008 в 16:25)   письмо автору
 
 

Здравствуйте. Когда я бьюсь над какой-нибудь проблемой и все способы уже испробованы, а моего мозга не хватает - я пишу на этот форум. Поскольку только здесь мне дают свежие идеи.

Суть проблемы в том, что существует форма добавления комментария, из нее методом post передаются переменные в обработчик, при этом скрипт уходит на страницу обработчика и я возвращаюсь на страницу с формой мето-тегом meta http-equiv='Refresh' content='0; URL=index. При этом действии страница обновляется.

Проблема в том, что если нажать кнопку браузера назад, то мы попадаем на страницу обработчика и только при повторном нажатии на кнопку назад попадаем на страницу с формой. Чтобы решить эту проблему я сделал обработчик в одном файле с формой (то есть и обработчик и форма находятся в одном php документе), а также запретил браузеру кешировать страницу мета тегами: <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> и <META HTTP-EQUIV="Expires" CONTENT="-1">, но это решает проблему только отчасти.

Просто не выводится пустое окно обработчика, но по-прежнему, чтобы вернуться назад требуется дважды нажать кнопку браузера. Вопрос в том - как сделать предачу в обработчик без обновления страницы. Подскажите, пожалуйста. Я думаю, что, наверное, возможно средствами javascript или ajax , но не уверен.

Заранее спасибо.

  Ответить  
 
 автор: Николай2357   (18.12.2008 в 19:49)   письмо автору
 
   для: InfernuS   (18.12.2008 в 16:25)
 

Не совсем понятна идея с кнопками "назад", но если просто нужно отправить данные без обновления, то конечно нужен аякс. Есть масса вариантов. Вот один из. Если подойдет, могу помочь настроить.

  Ответить  
 
 автор: InfernuS   (18.12.2008 в 22:08)   письмо автору
 
   для: Николай2357   (18.12.2008 в 19:49)
 

Спасибо что откликнулись. Я посмотрел код по ссылке, похоже, это не совсем то, что надо. Мне еще требуется вернуть результат обработчика на страницу с формой. Вы могли бы мне помочь. Я нашел код, который, судя по всему, мне подходит, но я не могу разобраться, т.к. плохо знаю ajax.

У меня есть форма моя:

<div align=center id=cerror></div>
<form action="obrobotchik.php" method="post" name="form_comm">
<input name='author' id='author' type='hidden' value='$_SESSION[user]'>
<p><label class='text_soon'>Введите текст комментария: <br></label><label class='menu-text'> 
<br></label><textarea class='imput'  name='text' id='text' cols='100' rows='7'></textarea></p>
<input name='id' id='id' type='hidden' value='$id'>
<p><input class='bat' name='sub_com' id='sub_com' type='submit' value='Комментировать'></p>";
</form>


И код скрипта:

function addComment()
{
  //получаем ссылку на нашу форму
  form = document.getElementById("form_comm");
  //текст комментария
  text = form.text.value;
  //имя автора
  name = form.author.value;
  
  id = form.id.value;
   //получаем ссылку на поле для вывода информации
  
  
  
  erdiv=document.getElementById("cerror");
  //добавляем запись
  erdiv.innerHTML = "<img src='pr.gif' width='100' height='9'><br><p>Ваш комментарий обрабатывается...</p>"

  //посылаем запрос на сервер
  JsHttpRequest.query
  (
    "obrobotchik.php",
    {
      "text": text,
      " id ":  id ,
      "author": name 
    },
    function (result, errors) 
    {
      //получаем ответ от сервера
      if (result.err=='no')
      {
        //очищаем поле для вывода информации
        erdiv.innerHTML = "";
        // создаем новый блок Div
        td = document.createElement("div");
        // заполняем блок div информацией
        td.className="comm";
        result.text = regexp(result.text);
        
        td.innerHTML = "<p class='comadd'>Комментарий добавил(а): <strong>"+result.name+"</strong><br>Дата: "+result.date+"</p><p>"+result.text+"</p>";
        // получаем ссылку на блок для добавления комментариев
        comtb = document.getElementById("comtab");
        // добавляем комментарий в конец
        comtb.appendChild(td);
        // очищаем поле для ввода информации
        form.text.value = "";
        
      }
      else
      {
        //если есть ошибки выводим их в поле информации
        erdiv.innerHTML = result.log;
      }
    },
  true
  )
}


Я попробовал подогнать код под себя, но не знаю - правильно-ли. Могли бы вы проверить и сказать если что не так. И еще надо-ли в обработчике писать еще что-нибудь кроме заголовков запрета кэширования?

  Ответить  
 
 автор: Николай2357   (18.12.2008 в 22:23)   письмо автору
 
   для: InfernuS   (18.12.2008 в 22:08)
 

Вообще то там всё возвращается, на то он и аякс. Вы напишите подробнее, что конкретно хотите вернуть и куда. Я подскажу тогда. А из этого кода ничего не понятно. Он ведь не Ваш...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования