Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: jQuery Ajax select без перезагрузки

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: В админке, в зависимости от типа создаваемой страницы - выдавать дополнительные поля.
JqNooB
Отправлено: 28 Октября, 2012 - 13:24:15
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Всем привет!
Не имею привычки спрашивать что-то на форумах, но здесь не вижу другого выхода, вроде всё верно, но не хочет работать.
Подскажите, пожалуйста, что не так?
По клику на кнопку слой отображается, а по "onchange" - ничего не происходит.
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <!doctype html>
  3. <html>
  4. <head>
  5. <meta charset="utf-8"> 
  6. <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
  7. <script type="text/javascript">
  8. function typeOfPage(){
  9.         var page = $('select[name="page"]').val();
  10.                 $.ajax({
  11.                              type: "POST",
  12.                              url: "test.php",
  13.                              data: {page: page}      
  14.             });
  15. };
  16. </script>
  17. </head>
  18. <body>
  19. <form method="post">
  20. <select name="page" onchange="javascript:typeOfPage();" >
  21. <option value="pages">Страница</option>
  22. <option value="goods">Товар</option>
  23. </select>
  24. <button class="submit" name="save" value="save">Отправить</button>
  25. </form>
  26. <?php if (isset($_POST['page']) && $_POST['page']=='goods'){?>
  27. <div name="jopa">срамота</div>
  28. <?php }?>
  29. </body>
  30.  

(Отредактировано автором: 28 Октября, 2012 - 20:58:55)

 
 Top
Мелкий Супермодератор
Отправлено: 28 Октября, 2012 - 13:45:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




JqNooB пишет:
по "onchange" - ничего не происходит.

Как ничего? Отправляется ajax запрос. Но это всё, что происходит, на результат этого запроса никаких действий не указано.
http://api[dot]jquery[dot]com/jQuery[dot]ajax/ , callback на success или другое какое понравившееся событие.


-----
PostgreSQL DBA
 
 Top
AlexAnder
Отправлено: 28 Октября, 2012 - 13:48:18
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


Помог: 34 раз(а)





JqNooB пишет:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <div name="jopa">срамота</div>

Ха-ха

(Отредактировано автором: 28 Октября, 2012 - 13:48:31)



-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
JqNooB
Отправлено: 28 Октября, 2012 - 18:54:55
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Мелкий пишет:
callback на success или другое какое понравившееся событие.

Можно подробней? Я с Аяксом дел не имел до этого.
Мне нужно только чтобы этому скрипту передалась $_POST['page']; (то есть произошло действие, аналогичное нажатию кнопки).
Если я добавляю
CODE (htmlphp):
скопировать код в буфер обмена
  1. success: function(data){ $('div[name="jopa"]').html(data); }

- всё равно ничего не выходит

(Отредактировано автором: 28 Октября, 2012 - 20:27:34)

 
 Top
Мелкий Супермодератор
Отправлено: 28 Октября, 2012 - 19:02:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




JqNooB пишет:
Я с Аяксом дел не имел до этого.

А он тут и ни при чём. Это банальный JS с фреймворком. Гуглите, по основам js и jquery информации даже в рунете выше крыши.


-----
PostgreSQL DBA
 
 Top
JqNooB
Отправлено: 28 Октября, 2012 - 19:11:41
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Мелкий пишет:
Гуглите, по основам js и jquery информации даже в рунете выше крыши.

Естественно я сначала погуглил, сделал всё по мануалу, вот по этому http://programilla[dot]com/blog/site[dot][dot][dot]ruction/231[dot]html
Но результата нет, я же написал сразу, что не в моих правилах на форуме писать, т.к. обязательно найдётся такой умный человек, который про поисковую систему напомнит -"ОЧЕНЬ" вам за это признателен.
З.Ы. Вопрос рассчитан на тех, кто сталкивался с ним ранее и знает решение. Зачем писать попусту? Либо скопируйте и попробуйте запустить, добавив недостающее, затем скажите, чего не хватало - и я буду вам очень благодарен за помощь, либо оставьте свои наставления при себе.
 
 Top
Мелкий Супермодератор
Отправлено: 28 Октября, 2012 - 19:43:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




JqNooB пишет:
сделал всё по мануалу, вот по этому http://programilla.com/blog/site...ruction/231.html

Да? Странно, ничего похожего.
По ссылке как раз реализован success.

JqNooB пишет:
Либо скопируйте и попробуйте запустить

Зачем, если и так очевидно, что банально обработчика результата запроса нет?


-----
PostgreSQL DBA
 
 Top
JqNooB
Отправлено: 28 Октября, 2012 - 19:56:30
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Мелкий пишет:

банально обработчика результата запроса нет?

Мне не нужен результат, мне нужно асинхронно отправить этому скрипту post-запрос, из тела кода вы виде, что я ловлю его уже в php?
Вы напишите сразу ещё 30 постов, я вижу по статистике, что каждый 33-й бывает полезным.
 
 Top
caballero
Отправлено: 28 Октября, 2012 - 20:02:35
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




во первых передавать именно через POST здесь не имеет смысла
во вторых поставь обработчик на ошибку а не success

(Отредактировано автором: 28 Октября, 2012 - 20:03:20)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
JqNooB
Отправлено: 28 Октября, 2012 - 20:13:29
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




caballero пишет:
во-первых,
во- вторых

Пожалуйста, напишите код, я не работаю ни с js, ни jq, ни с ajax (указал это в нике, я слишком стар, чтобы жевать мануалы, память уже не та, вам молодым проще), потому прошу, исправьте код. Мои нейронные сети ещё способны понимать аналогии, потому это будет единственным полезным решением.
 
 Top
Мелкий Супермодератор
Отправлено: 28 Октября, 2012 - 20:21:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




JqNooB пишет:
мне нужно асинхронно отправить этому скрипту post-запро

Ну так вы это сделали. Абсолютно никакой реакции в браузере быть и не должно.

JqNooB пишет:
я ловлю его уже в php?

И что?
Так и должно быть. PHP поймал запрос, обработал, умер. Всё. А результат его работы должен обрабатывать браузер. А браузеру никаких указаний не дано, ну и выкидывает в /dev/null

Момент, вы хотите сказать, что представленный листинг - и есть test.php?
Тогда обратите внимание, что в приведённой статье обработчик AJAX'а отличается от обработчика обычного запроса (обычного запроса там и нет). В частности - возвращает только фрагмент данных, которые будут вставлены внутрь div'а.


-----
PostgreSQL DBA
 
 Top
JqNooB
Отправлено: 28 Октября, 2012 - 20:41:17
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Мелкий пишет:
JqNooB пишет:
мне нужно асинхронно отправить этому скрипту post-запро

Ну так вы это сделали.

Мелкий пишет:
В частности - возвращает только фрагмент данных, которые будут вставлены внутрь div'а.

Вооот уже есть немного понимания. Да, это листинг test.php. Я просто доподлинно не знаю, что делает функция $.ajax(), нагуглил - попробовал - не робит.
Давайте, чтобы в остальных 29-ти постах вам было проще, я опишу работу скрипта.

1. У нас есть выпадающий список, в котором пользователь выбирает тип страницы.
2. Есть подключение jQ-библиотеки.
3. Есть скрипт, который в идеале должен срабатывать при смене вариата в меню. Его задача - значение этого варианта (value) вернуть обратно скрипту в виде пост-запроса.
4. Есть условие на php, которое в зависимости от текущего значения переменной $_POST['page'] возвращает определённое содержание. В этом примере появляется "срамота" (в рабочей версии я заменю это на html-код дополнительных полей, требуемых для этого типа страницы).
5. Есть кнопка submit - чисто для проверки, что без Ajax всё работает. Если на неё нажать, то происходит отправка пост-запроса этому скрипту и появляется "срамота".

Задача - сделать появление "срамоты" без перезагрузки (нажатия кнопки) по действию "onchange".
 
 Top
Panoptik
Отправлено: 28 Октября, 2012 - 20:57:13
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




у вас есть 2 файла:
к примеру ваш пример index.php
CODE (htmlphp):
скопировать код в буфер обмена
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <script src="ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
  6. <script type="text/javascript">
  7. function typeOfPage(){
  8.        var page = $('select[name="page"]').val();
  9.                $.ajax({
  10.                             type: "POST",
  11.                             url: "ajax.php",
  12.                             data: {page: page},
  13.                             //именно вот это место отрабатывает когда аякс запрос прошел успешно и тут мы можем сказать браузеру что делать с полученными данными
  14.                             success: function(data) {
  15.                                   $('#ajax_reciever').html(data);
  16.                             }
  17.            });
  18. };
  19. </script>
  20. </head>
  21. <body>
  22. <form method="post">
  23. <select name="page" onchange="typeOfPage();" >
  24. <option value="pages">Страница</option>
  25. <option value="goods">Товар</option>
  26. </select>
  27. <button class="submit" name="save" value="save">Отправить</button>
  28. </form>
  29. <div id="ajax_reciever" name="jopa">срамота</div>
  30. </body>


должен быть еще один файл, который обработает ваш аякс запрос
к примеру ajax.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. echo $_POST['page']. ' <<< это ваш $_POST[page] который вернулся через аякс';
  4.  


вот и всё. если посмотреть внимательно думаю можно заметить разницу

(Отредактировано автором: 28 Октября, 2012 - 21:00:16)



-----
Just do it
 
 Top
JqNooB
Отправлено: 28 Октября, 2012 - 21:37:42
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Panoptik пишет:
посмотреть внимательно думаю можно заметить разницу

Огромное спасибо, придали понимания, сдвинулось с места.
В подключении JQ не хватало "//" в начале, то, как вы описали - работает, как вы описали, но задача иная, должно работать из одного файла.
У меня получилось так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
  6. <script type="text/javascript">
  7. function typeOfPage(){
  8.        var page = $('#page_type').val();
  9.                $.ajax({
  10.                             type: "POST",
  11.                             url: "<?php
  12.                             if (strrchr($_SERVER['REQUEST_URI'], "?")) echo $_SERVER['REQUEST_URI']."&ajax";
  13.                             else echo $_SERVER['REQUEST_URI']."?ajax";?>",
  14.                             data: {page: page},
  15.                             success: function(data) {
  16.                                   $('#ajax_reciever').html(data);
  17.                             }
  18.            });
  19. };
  20. </script>
  21. </head>
  22. <body  onload="typeOfPage();">
  23. <?php
  24. if (!isset($_GET['ajax'])){
  25. ?>
  26. <form method="post" >
  27. <select name="page" id="page_type" onchange="typeOfPage();">
  28. <option value="pages">Страница</option>
  29. <option value="goods">Товар</option>
  30. </select>
  31. </form>
  32. <div id="ajax_reciever"></div>
  33. <?php }
  34. else {
  35.         if (isset($_POST['page'])){
  36.                 if($_POST['page']=='goods')echo "парапабабам";
  37.                 if($_POST['page']=='pages')echo "татарамдарамдам";
  38.         }
  39. }
  40. ?>
  41. </body>
  42. </html>
  43.  

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

(Отредактировано автором: 29 Октября, 2012 - 00:14:34)

 
 Top
JqNooB
Отправлено: 29 Октября, 2012 - 02:11:21
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Заработало)))! В общем главное (пишу для тех, кто нагуглил эту ветку), чтобы на странице с параметром ?ajax было пусто.

(Отредактировано автором: 29 Октября, 2012 - 02:40:20)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB