Есть select с регионами, при выборе подгружаются города в другой select. id(ucid) города в value подставляет, а вместо названия (city_name) пишет null. Код брал готовый, но дорабатывал под себя. Код (Text): <form action='#' method='get'> <select name='region' id='region' class='delivery_city'> <option value=0>Выберите регион:</option>"; $region_list = mysql_query ("SELECT * FROM region"); while ($region = mysql_fetch_array($region_list)) {echo "<option value='".$region['region_id']."'>".$region['region_name']."</option>";} echo "</select> <select name='city' id='city' disabled='disabled'> <option value='0'> - </option> </select> </form> JS Код (Text): $(document).ready(function () { $('#region').change(function () { var region = $(this).val(); if (region == '0') { $('#city').html('<option>- выберите -</option>'); $('#city').attr('disabled', true); return(false); } $('#city').attr('disabled', true); $('#city').html('<option>загрузка...</option>'); var url = 'get_city.php'; $.get( url, "region=" + region, function (result) { if (result.type == 'error') { alert('error'); return(false); } else { var options = ''; $(result.cities).each(function() { options += '<option value="' + $(this).attr('ucid') + '">' + $(this).attr('city_name') + '</option>'; }); $('#city').html('<option value="0">- выберите город -</option>'+options); $('#city').attr('disabled', false); } }, "json" ); }); }); get_city.php Код (Text): include_once 'connect_db.php'; mysql_query ("set character_set_client='koi8r'"); mysql_query ("set character_set_results='koi8r'"); mysql_query ("set collation_connection='koi8r_general_ci'"); $region = @intval($_GET['region']); $city_list=mysql_query("SELECT ucid, city_name FROM city WHERE parent_region=$region"); if ($city_list) { $num = mysql_num_rows($city_list); $i = 0; while ($i < $num) { $cities[$i] = mysql_fetch_assoc($city_list); $i++; } $result = array('cities'=>$cities); } else { $result = array('type'=>'error'); } print json_encode($result);
Это в моем понимании ошибка, а с точки зрения кода ошибки нет. Просто он подставляет в значение не то, что мне надо. Что мне надо я написал, но не понимаю, что сделал неверно в коде! Отсюда и мой пост на этом форуме!
ну вот. у вас в голове одно представление, код выдает другое состояние. это и есть ошибка. процесс заставления процессора выдавать ожидаемые результаты называется отладка. которую вы и обязаны провести.
Кроме пустой болтовни может есть какие-то нормальные советы? Прежде, чем сюда постить, я уже по разному пытался отловить ошибку. Поэтому "умные" посылы на пхпфак и в прочие места, в данном случае, не к месту.
как пытались отловить ошибку? это не пустая болтовня. мы-то умеем понимать состояния программы на разных этапах и знаем в каких местах ставить брейкпоинты для глубокого анализа. а вот как вы такой дерзкий отлаживали свой же код?
Ну, молодец! Возьми себе леденец и нарисуй медаль за то, что "в состоянии"! Я сейчас не прошу за меня написать код, я прошу указать мне на то, что сам не вижу. Или тут форум для неполовозрелых умников, которые пишут здесь для самоутверждения, а не для помощи?
а ты знаешь мне честно посрать. ты взялся за задачу которая тебе не по плечу. потому что у тебя нет базиса программирования а ты уже пытаешься использовать фреймворки. тебя вот мама воспитала на людей бросаться но головой думать не научила. это печально... тут форум для людей в первую очередь. а люди умеют нормально общаться.
Я первым делом в отладчике смотрел. Не в Хроме, а в Сафари (не считаю, что хуже). Нет ошибок! Здесь банальная невнимательность в коде, но я не могу увидеть.
ну так промежуточные выводы значения переменных почему не сделать? чтоб точно отловить момент в который все ломается
Похоже, что здесь неверно массив строится. Код (Text): $city_list=mysql_query("SELECT ucid, city_name FROM city WHERE parent_region=$region"); if ($city_list) { $num = mysql_num_rows($city_list); $i = 0; while ($i < $num) { $cities[$i] = mysql_fetch_assoc($city_list); $i++; } $result = array('cities'=>$cities); } Как я понял это неправильно, если выборка по 2 строкам? Код (Text): $result = array('cities'=>$cities);
так можно посмотреть результат $result потом посмотреть где он использован и так дальше, везде проверять
Нет, в массиве все нормально! Ошибка кроется здесь. Но мои неважные знания js не позволяют разобраться. city_name как null передается. Код (Text): $(result.cities).each(function() { options += '<option value="' + $(this).attr('ucid') + '">' + $(this).attr('city_name') + '</option>'; });