Как перезагружать страницы без POST

dok

Новичок
Как перезагружать страницы без POST

Начинаю практическое освоение PHP etc. Просьба подсказать решение проблемы.

1) Есть страница с формой запроса (выпадающие списки, радиокнопки, выключатели). В зависимости от выбранных значений должна меняться выводимая на ФОРМЕ ЗАПРОСА информация. Выбрали "Искать в городе" - в выпадающий список заносятся названия районов города, если выбрали "В области" - то районы области. После окончательного уточнения условий запроса пользователь нажимает кнопку "Искать".

2) Вторая задача - после вывода результатов поиска, обеспечить "интерактивное", т.е. без нажатия вручную на кнопку "Submit/Искать", изменение результатов выдачи при корректировке условий запроса.

Т.е. в одном окне и форма запроса (сверху) и результаты выдачи (ниже), меняем ручками условия (например, уточняем район в выпадающем списке) - сразу должна выводится уточненная информация в результатах поиска (т.е. опять пользователю не нужно нажимать кнопку "искать").

Буду очень признателен за советы от более опытных специалистов. Понимаю, что должны использоваться Javascript, но не знаю как :(
 

zerkms

TDD infected
Команда форума
ajax и в гугл.
если найденное будет малопонятно - то учить всё с самого начала, начиная с основ: как сделать всё то же самое но с перегрузкой страницы.
 

dok

Новичок
спасибо за оперативный ответ, но если честно, то я не совсем далек от программирования и почти 8 лет занимаюсь статичным html, и более 15 всевозможными языками программирования, начиная от paskal|delphi и кончая cpp.

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

Если Вам попадался материал по этой теме, буду признателен за ссылку на него. Как это делать с традиционной перезагрузкой (обработкой POST\GET) мне понятно, а вот в обход запроса сервера, либо хотя бы в обход телодвижений userа, мне не совсем ясно.
 

dok

Новичок
Автор оригинала: *****
в обход запроса сервера врядли получится =)
Большое спасибо за поддержку. Я уже сам начинаю понимать, что без обращения к серверу не получится, иначе придется все загонять в тексты скриптов. Постараюсь научиться уму разуму по Вашим ссылкам и по текстам сайтов по JS и PHP.

Теперь насколько я понимаю:
- задача минимум - при изменении одного из полей формы (списка, радиокнопки и пр.) инициировать обновление страницы через сервер, но без потери ранее введенной информации.
- задача максимум - постараться не обновлять всю страницу, здесь я понимаю, без ajax не обойтись, но я пока в этом мало смыслю, надо подучиться.

Если подскажете навскидку описание примера решения задачи минимум - буду признателен.
 

dok

Новичок
Автор оригинала: dimagolov
есть событие onchange, на него можно вешать обработчик и делать form.submit()
Код:
<input type= 'text' onchange='document.forms["Form1"].submut();' />
Большое спасибо за подсказку, путем проб и ошибок я уже дошел до этого.
Как я понял в этом же блоке можно манипулировать значениями в других элементах формы, например, чтобы что-то сбросить или принудительно установить при следующем обновлении и показе страницы.

Если будут другие ценные советы, буду признателен.
 

DiMA

php.spb.ru
Команда форума
совет: научись программить на javascript
 

dok

Новичок
Автор оригинала: dimagolov
есть событие onchange, на него можно вешать обработчик и делать form.submit()
Код:
<input type= 'text' onchange='document.forms["Form1"].submut();' />
Приношу извинения за назойливость новичка, но я похоже запутался в трех соснах.

В теории все понятно, но когда я попытался сфомировать динамический php код с самозагрузкой этого же файла, то часть javascript-ов работала, а часть нет. Попробовал разделить на 2 классических файла, один с формой, другой с j,работчиком и тут окончательно понял, что скрипт submit(); просто не работает. Далее ушел от динамического к простому html-коду на форме и уткнулся в тупик, что даже простейший код не работает.

Кусок кода с формой:
----------------------------------------------------------------------------------
<form name="vdForm" method="post" action="vd_proba_22.php" target="_blank">
<p>
<input type="text" name="textfield" onChange="javascript:document.vdForm.submit();">
<input type="text" name="textfield2" onChange="javascript:document.vdForm.textfield.value='0';">
</p>
<p> <input type="submit" name="submit" value="Submit"> </p>
</form>
------------------------------------------------------------------------------------

При этом скрипт "javascript:document.vdForm.textfield.value='0';" отрабатывается нормально, а вот первый
"javascript:document.vdForm.submit();" - никак не хочет. Я пытался варьировать и с указанием формы (.vdForm., .forms[0]., .forms["vdForm"].) - все равно ничего не получилось.

Подскажите люди добрые, м.б. где-то нужно что-то указать ранее, в <head>?

По "букварям" submit() должен полностью эмулировать нажатие кнопки, но этого почему-то не происходит :(
 

dok

Новичок
спасибо за внимание, но давайте все таки пока не будем переходить на личности, ведь мне уже 40 с хвостиком и за плечами много всего. И если я начинаю изучать php, это не значит, что я "чайник" по жизни и в программировании :)

Почему submit? В (type="submit") его загнал DreamWeaver, в (value="Submit") - ничего не значит, а в (name="submit") каюсь, загнал я, потому, что в одной умной книжке увидел в обрабатывающем блоке проверку на нажатие кнопки:
isset($_POST['submit']) и посчита это необходимым.

Если я не прав - каюсь. Я полагал что через POST летит имя объекта формы, а раз это имя 'submit', то и name кнопки должно быть таким же.

Так ошибка только в этом? У меня сейчас нет под рукой сервера чтобы проверить.
 

AmdY

Пью пиво
Команда форума
dok
установи себе расширение для дебага js, firebug для firefox, dragonfly для opera
 

dimagolov

Новичок
dok, в дополнение к тому что сказал AmdY

сервер для того, как работает JS на HTML страничке не нужен, можно открыть ее с диска в браузере. уж браузер то есть в наличии? :)

п.с. не надо обижаться, когда кто-то находит время дать совет, не надо обсуждать свои знания - их, как и их отсутствие, все увидят по сообщениям, и ни при каких условиях не надо оправдываться. можно только мотивированно указать собеседнику на его не правоту, если такая есть.
 

dok

Новичок
принято.

Я в принципе и не обижаюсь, но не всегда приятно, когда "бросают носом об стол" даже не спросив как зовут :)

В целом я действительно благодарен, всем, кто находит время для оперативной помощи таким, как я.

По поводу "dragonfly для opera" спасибо, постараюсь понять, что это такое и как его ставить.

По поводу наличия браузера, конечно браузер есть и даже не один. Просто начальный код написан на php, а уже потом я начал упрощать до чистого html, но в рамках php-ного файла. А php, насколько я понимаю, без сервера локально не посмотреть. Завтра, на свежую голову попробую выполнить Ваши рекомендации.

Спасибо за участие, попробую поиграться.
 

dimagolov

Новичок
а уже потом я начал упрощать до чистого html, но в рамках php-ного файла
все, что происходит на клиенте никакого отношения к php не имеет. поэтому, очень часто удобней написать html на 20 строк и отладить там непонятный момент, чем делать то же самое на большом проекте, где пхп генерит html/js и т.д. когда убедились, что все на клиенте работает как задумывалось, можно смотреть почему не работает комплексно.
 

dok

Новичок
да, как говорится "дело было не в бобине, ...".

Большое спасибо за совет. Вслед за ситуацией с пробелом после HEREDOC эта была самая крутая засада, причем на пустом месте :)

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

Вот это пока непривычно, но я стараюсь постигать, в том числе и с Вашей помощью.

-~{}~ 23.04.09 21:55:

Автор оригинала: dimagolov
все, что происходит на клиенте никакого отношения к php не имеет. поэтому, очень часто удобней написать html на 20 строк и отладить там непонятный момент, чем делать то же самое на большом проекте, где пхп генерит html/js и т.д. когда убедились, что все на клиенте работает как задумывалось, можно смотреть почему не работает комплексно.
Мне уже стыдно обращаться к нашим ГУРУ по пустяковым вопросам, но сегодня столкнулся с ситуацией, которой не смог найти объяснение и пока не нашел его в инете. Есть 2 радиокнопки, при выборе каждой из них должна перезагружаться страница с этой формой (идет подстройка остальных элементов).

Все вроде хорошо в Opera и Mozilla, а вот в "любимом" IExplorere для реальной перезагрузки страницы нужно щелкнуть сначала по кружочку, а потом по надписи рядом (даже если ее нет). И хоть убейся.

Наверное ситуация не уникальная, если есть опыт решения таких проблем - приму информацию с признательностью.

Вот блок кода:
-----------------------------
if ( ($area==1) || ($area==2) ) //выбран город или область
{if ($sel_reg_zone==0) //выбран поиск по РАЙОНАМ
{ echo "<p>Ищем по:<br> <label> <input type='radio' name='sel_reg_zone' value='0' checked onChange='document.vdForm.submit();' > районам </label><br>
<label> <input type='radio' name='sel_reg_zone' value='1' onChange='document.vdForm.submit();'> зонам</label></p>"; }
else //выбран поиск по ЗОНАМ
{ echo "<p>Ищем по:<br> <label> <input type='radio' name='sel_reg_zone' value='0' onChange='document.vdForm.submit();'> районам </label><br>
<label> <input type='radio' name='sel_reg_zone' value='1' checked onChange='document.vdForm.submit();' > зонам</label></p>"; }
}
-------------------------------
Пробовал удалять <label> и вообще тексты - ситуация не менялась. Выпадающие спмски в этом режиме работают нормально, но хотелось бы поставить радиокнопки для удобства благодарных в будущем посетителей :)
 

dok

Новичок
большое спасибо за совет.

Понятно в чем дело, onChange срабатывает после потери фокуса, а для этого требуется второй клик.

Поставил onclick - все стало в норму.
 
Сверху