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
Форумы портала PHP.SU :: Версия для печати :: AJAX + PHP + MYSQL
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » AJAX + PHP + MYSQL

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

1. Fier - 10 Декабря, 2012 - 13:32:39 - перейти к сообщению
Проблема: то что при выборе области, область заноситься в переменную, а город почему-то не выберается.

При помощи аджакса выводиться алерт, область заполняется, город пустой полность. Укажите где ошибка, либо подскажите где копать.
Сижу вторые сутки. Делал по примеру, но ввел свои корективы.

Сама форма:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <td>
  3.                                         Регион:<font color="red">*</font>
  4.                                         </td>
  5.                                         <td>
  6.                                         <div style="display: none" id="loading_region"><img alt="" src="/img/ajax_loader.gif" />Загрузка...</div>
  7.                                         <div>
  8.        
  9.                                         <select name="regionid" id="region" onchange="getList('city', 'region')" style="width:300px;">
  10.                                     <?php
  11.                                     $sql = mysql_query("SELECT id,name FROM region");
  12.                                     $row = mysql_fetch_array($sql);
  13.                                     do {
  14.                                         printf('
  15.                                         <option value="%s">%s</option>
  16.                                         ',$row['id'],$row['name']);}
  17.                                         while ($row = $row = mysql_fetch_array($sql));
  18.                                     ?>
  19.                                     </select>
  20.                                         </div>
  21.                                         </td>
  22.                                         </tr>
  23.                                         <tr>
  24.                                         <td>
  25.                                         Город:<font color="red">*</font>
  26.                                         </td>
  27.                                         <td>
  28.                                         <div style="display: none" id="loading_city"><img alt="" src="/img/ajax_loader.gif" />Загрузка...</div>
  29.                                         <div>
  30.                                         <select name="city_id" id="city" style="width:300px;">
  31.                                     <option>-Выберите город-</option>
  32.                                                                          
  33.                                     </select>
  34.                                         </div>
  35.  





Прикрутил я аджакс:

Код:

CODE (javascript):
скопировать код в буфер обмена
  1.  <script type="text/javascript">
  2.  
  3. $(document).ready(function(){
  4.     $("#button").click(function(){
  5.  
  6.      var region = $("#region").val();
  7.      var city = $("#city").val();
  8.            
  9.          alert(region + "-" + city);  
  10.            
  11.       $.ajax({
  12.  * * * * *type: "POST",
  13.  * * * * *url: "save_clients.php",
  14.  * * * * *data: {
  15.  * * * * * * *region: region,
  16.  * * * * * * *city: city,
  17.  
  18.  * * * * }
  19.  });
  20.  });
  21.  
  22.  });
  23.  
  24. </script>


Повесил его на кнопку. Вот только слабый все же прогресс. Алертом оно выводит все равно только область. Почему-то оно не подтягивает города.

Код:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. mysql_connect('localhost', 'root', '111' );
  3. mysql_query('set names utf8');
  4.  
  5. $id   = (int)$_POST['id']; // id объекта (страна или регион)
  6. $type = $_POST['type']; // тип списка, который нужно получить (города или регионы)
  7.  
  8. sleep(1); // картинка
  9.  
  10. if ($type == 'city') {
  11.         // выбираем города в данном регионе
  12.         $result = mysql_query('SELECT *
  13.                            FROM city
  14.                            WHERE region_id = '.$id.'
  15.                            ORDER BY name');
  16.         if (!empty($result)) {
  17.                 echo "out.options[out.options.length] = new Option('-Выберите город-','none');\n";
  18.                 while ($city = mysql_fetch_array($result)) {
  19.                         echo "out.options[out.options.length] = new Option('".$city['name']."','".$city['city_id']."');\n";
  20.                 }
  21.         }
  22.         else {
  23.                 echo "out.options[out.options.length] = new Option('нет городов','none');\n";
  24.         }
  25. }
  26. /* if ($type == 'region') {
  27.         // выбираем регионы в данной стране
  28.         $result = mysql_query('SELECT *
  29.                             FROM region
  30.                             WHERE country_id = '.$id.'
  31.                             ORDER BY name');
  32.         if (!empty($result)) {
  33.                 echo "out.options[out.options.length] = new Option('выберите регион...','none');\n";
  34.                 while ($region = mysql_fetch_array($result)) {
  35.                         echo "out.options[out.options.length] = new Option('".$region['name']."','".$region['region_id']."');\n";
  36.                 }
  37.         }
  38.         else {
  39.                 echo "out.options[out.options.length] = new Option('нет регионов','none');\n";
  40.         }
  41. } */
  42. ?>


Вот city.php на который посылается аджакс при обновлении городов:

Код:

CODE (javascript):
скопировать код в буфер обмена
  1. <!-- Города -->
  2.  
  3. <script type="text/javascript" src="js/jquery.js"></script>
  4.                         <script type="text/javascript">
  5.                         function getList(type, obj) {
  6.                                 $('#loading_' + type).show();
  7.                                 $.post('/blocks/city.php', {type: type, id: $('#'+obj).val()}, onAjaxSuccess);
  8.                                 function onAjaxSuccess(data) {
  9.                                         out = document.getElementById(type);
  10.                                                 for (var i = out.length - 1; i >= 0; i--) {
  11.                                                 out.options[i] = null;
  12.                                                 }
  13.                                         eval(data);
  14.                                         $('#loading_' + type).hide();
  15.                                 }
  16.                         }
  17.                         </script>


<!-- Города -->

Короче курю дальше. Не могу найти в чем проблема, почему СЕЛЕКТ не запоминает город.
2. Zuldek - 18 Декабря, 2012 - 15:15:24 - перейти к сообщению
Постится обычно суть задачи, суть проблемы, исходники, описываются ваши попытки решить проблему.
До чего вы продвинулись в своем "курении"?

Просто смотреть на скрипты результата будет мало если там не явный бред.

0. смотрим лог ошибок брауезера (если пусто и не присходит прозрения, - идем дальше).
1. Включаем багтрекер
2. смотрим что уходит аяксом
3. смотрим что приходит от сервера
4. если на этом этапе ничему не удивляемся (вероятнее всего, - удивляемся), то делаем вывод полученных с сервера данных и смотрим почему не хочет выполняться ваш eval().
Вероятнее всего, - потому что мы либо не доходим до этого этапа, либо передаем методу бред (см пункт 0).
Ставить себе ваши скрипты нет никакого желания.
Отлаживайте сами по указанному порядку, либо показывайте где можно посмотреть в работе, коли отлаживать самостоятельно так не хочется.
3. Fier - 18 Декабря, 2012 - 19:07:21 - перейти к сообщению
Вывожу через алерт полученные данные. Область выводит, точнее записывает айдишник, нормально вроде. А вот город почему то не запоминает и просто пропуск (пустое поле) выводится в алерт.

Сам список городов он подтягивает и запоняет в зависимости от того какая область выбрана.
4. Zuldek - 19 Декабря, 2012 - 09:28:06 - перейти к сообщению
Соответственно, - смотрите firebugom или чем удобно не приходит ли у вас город с сервера. Если (Скорее всего) не приходит (ведь вы не можете его вывести), - идем на серверный скрипт, делаем вывод отладочной информации на каждом этапе работы:
1. Вывод полученных от клиента параметров.
2. Вывод тела запроса и результата запроса к бд либо mysql_error()
3. Вывод сформированного ответа, который отправляется обратно в клиент и который вы передаете в eval()
4. На клиенте выводите алертом все полученные в выводе на ajax-запрос данные.
5. Fier - 22 Декабря, 2012 - 11:14:08 - перейти к сообщению
Вывод городов идет. Я получаю список. Но когда я передаю данные на сервер, он их не получает. Тоесть переменная = 0.

Алертом я вывожу. Область показывает а город нет.
6. Fier - 23 Декабря, 2012 - 19:24:46 - перейти к сообщению
Решил этот вопрос.

Возник уже другой.

 

Powered by ExBB FM 1.0 RC1