Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.11.2010, 11:04
Аспирант
Отправить личное сообщение для Lion_astana Посмотреть профиль Найти все сообщения от Lion_astana
 
Регистрация: 19.11.2010
Сообщений: 48

Снова динамический select
Привет всем!Сразу извиняюсь если ошибся разделом, просто не до конца понял в чём ошибка в скриптах:или в запросе к базе, или в JS.

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

Вот index:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Untitled Document</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="selects.js"></script>
</head>
    <body>
        <form action="#" method="get">
            <p>Страна</p>
            <select name="country_id" id="country_id">
                <option value="0">- выберите страну -</option>
                 <option value="1">Казахстан</option>
                  <option value="2">Россия</option>
                  <option value="3">Польша</option>
            </select>
            <p>Регион:</p>
            <select name="region_id" id="region_id" disabled="disabled">
                <option value="0">&nbsp;</option>
            </select>
        </form>
    </body>
</html>


Вот get_regions:

<?php
$db = mysql_connect ("localhost","alex","12345");
mysql_select_db("optoviki",$db); 
 
mysql_set_charset('utf8'); 
 
$country_id = @intval($_GET['country_id']);
 
$result2 = mysql_query ("SELECT `id`,`title` FROM `gorod` WHERE `id_strana` = $country_id",$db);
$myrow2 = mysql_fetch_array($result2); 
 
$regions = array();
while($myrow2=mysql_fetch_array($result2)) {
  $regions[] = $myrow2;
} 
 
$result = array('type'=>'success','regions'=>$regions); 
 
/*
 * Упаковываем данные с помощью JSON
 */
print json_encode($result);
?>



Вот selects.js:

$(document).ready(function () {
    $('#country_id').change(function () {
        var country_id = $(this).val();
        if (country_id == '0') {
            $('#region_id').html('');
            $('#region_id').attr('disabled', true);
            return(false);
        }
        $('#region_id').attr('disabled', true);
        $('#region_id').html('<option>загрузка...</option>');
        
        var url = 'get_regions.php';
        
        $.get(
            url,
            "country_id=" + country_id,
            function (result) {
                if (result.type == 'error') {
                    alert('error');
                    return(false);
                }
                else {
                    var options = '';
                    $(result.regions).each(function() {
                        options += '<option value="' + $(this).attr('id') + '">' + $(this).attr('title') + '</option>';
                    });
                    
                    $('#region_id').html(options);
                    $('#region_id').attr('disabled', false);
                }
            },
            "json"
        );
    });
});


Плюс ко всему тут же в корне лежит Jquery.js.

Вопрос:кто-нибудь может подсказать куда теряется первый элемент массива?
Ответить с цитированием
  #2 (permalink)  
Старый 19.11.2010, 11:07
Аспирант
Отправить личное сообщение для Lion_astana Посмотреть профиль Найти все сообщения от Lion_astana
 
Регистрация: 19.11.2010
Сообщений: 48

Вот таблица gorod в базе:

-- phpMyAdmin SQL Dump
-- version 2.6.1
-- [url]http://www.phpmyadmin.net[/url]
-- 
-- Хост: localhost
-- Время создания: Ноя 18 2010 г., 10:09
-- Версия сервера: 5.0.45
-- Версия PHP: 5.2.4
-- 
-- БД: `optoviki`
-- 
 
-- -------------------------------------------------------- 
 
-- 
-- Структура таблицы `gorod`
-- 
 
CREATE TABLE `gorod` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `id_strana` int(3) NOT NULL,
  `title` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=24 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=24 ; 
 
-- 
-- Дамп данных таблицы `gorod`
-- 
 
INSERT INTO `gorod` VALUES (1, 1, 'Астана');
INSERT INTO `gorod` VALUES (2, 1, 'Алматы');
INSERT INTO `gorod` VALUES (3, 1, 'Шымкент');
INSERT INTO `gorod` VALUES (4, 1, 'Семей');
INSERT INTO `gorod` VALUES (5, 2, 'Ижевск');
INSERT INTO `gorod` VALUES (6, 2, 'Екатеринбург');
INSERT INTO `gorod` VALUES (7, 2, 'Ковров');
INSERT INTO `gorod` VALUES (8, 3, 'Варшава');
INSERT INTO `gorod` VALUES (9, 1, 'Тараз');
INSERT INTO `gorod` VALUES (22, 1, 'Рудный');
INSERT INTO `gorod` VALUES (21, 2, 'Санкт-Петербург');
INSERT INTO `gorod` VALUES (20, 2, 'Москва');
INSERT INTO `gorod` VALUES (23, 1, 'Костанай');
Ответить с цитированием
  #3 (permalink)  
Старый 19.11.2010, 11:20
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,245

ошиблись форумом?
у вас явная ошибка в PHP-коде
$result2 = mysql_query ("SELECT `id`,`title` FROM `gorod` WHERE `id_strana` = $country_id",$db);
$myrow2 = mysql_fetch_array($result2); // $myrow2 - никуда не передается
 
$regions = array();
while($myrow2=mysql_fetch_array($result2)) {// предыдущее значение $myrow2 безвозратно теряется
  $regions[] = $myrow2;
}


на будущее:
поставьте себе фаербаг
он позволяет видеть JS-ошибки, и отлаживать его код.
заодно можно видеть все AJAX-запросы и результаты в чистом виде.
и вы бы увидели, что именно сервер присылает код без первого города.
Ответить с цитированием
  #4 (permalink)  
Старый 19.11.2010, 11:26
Аспирант
Отправить личное сообщение для Lion_astana Посмотреть профиль Найти все сообщения от Lion_astana
 
Регистрация: 19.11.2010
Сообщений: 48

Спасибо большое, теперь буду знать.Я просто не так давно начал изучать веб-программирование, поэтому прошу меня строго не судить.


А не подскажете как переделать код так, чтобы передавалось с первым пунктом, а то я что-то не догоняю?


Ааааааааа, понял, сделал так:
$regions = array();
do{
  $regions[] = $myrow2;
 }
 while ($myrow2 = mysql_fetch_array($result2)); 
 
$result = array('type'=>'success','regions'=>$regions);

Последний раз редактировалось Gvozd, 19.11.2010 в 11:51. Причина: объеденил поток мыслей
Ответить с цитированием
  #5 (permalink)  
Старый 19.11.2010, 11:48
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,245

вы бы справку открыли.
там прямо в описании mysql_fetch_array даны примеры:
$result = mysql_query("SELECT id, name FROM mytable");

    while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
        printf ("ID: %s  Name: %s", $row[0], $row[1]);  
    }


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

Последний раз редактировалось Gvozd, 19.11.2010 в 11:50.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с динамическим формированием select elepsion jQuery 1 31.10.2010 14:31
Динамический Select или Input (автозаполнение, добавление данных, обновление) kudinov Элементы интерфейса 0 21.09.2010 14:12
динамический select. Не отображаются сгенерированные элементы списка в IE8 mrDeko Общие вопросы Javascript 1 30.08.2010 10:10
Продлема с получением данных из select Tartyga Общие вопросы Javascript 10 05.08.2009 22:13
заполнить select значениями другого select Central Элементы интерфейса 1 30.05.2009 14:41