Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 12.12.2014
Сообщений: 9

Не могу получить ответ от python скрипта и на его основе создать список (зависимые списки js ajax python)

18.03.2018, 20:58. Показов 5784. Ответов 6

Студворк — интернет-сервис помощи студентам
Привет!
Есть необходимость сделать динамические списки при помощи js, ajax jQuery, Python.
Данные в скрипт передал, сделал выборку по базе, по вот как вернуть ответ и как по нему заполнить поле выбора города на основании региона не могу понять.
Вот код страницы с дивами из которых беру данные и в который пытаюсь подгрузить города:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="utf-8">
        <title>Отправить комментарий</title>
        <link href='../css/style.css' rel='stylesheet' type='text/css'>
    </head>
    
    <body>
    
        <form name="comm_send" action="../cgi-bin/form.py" class="comm_send" onsubmit="return ValForm()">
    
            <div class='form'>
                <label for='region'>Регион: </label>
                <select size="1"  id='region' name="region" onchange="selectRegion(this.value)">
                    <option value=""></option>
                    <option value="1">Краснодарский край</option>
                    <option value="2">Ростовская область</option>
                    <option value="3">Ставропольский край</option>    
                </select>
            </div>
    
            <div class='form'>
                <div>Населённый пункт:<select id="city" name="selectDataRegion" value=""></select></div>
            </div>
    
            <div class="form">
                <input type="submit" value='Отправить'>
            </div>
    
        </form>
    
        <script type="text/javascript" src="../script/jquery.js"></script>
        <script type="text/javascript" src="../script/script.js"></script>
        <script type="text/javascript">
    
            function selectRegion(){
                    var id_region = $('select[name="region"]').val();
                    if(!id_region){
                            $('div[name="selectDataRegion"]').html('');
                    }else{
                            $.ajax({
                                    type: "GET",
                                    url: "../cgi-bin/select_city.py",
                                    data: {'id_region': id_region},
                                    success: function(city) {
                                        var cities = city;
                                        var text = "<option value=''>Выберите город</option>";
                                        document.comm_send.city.innerHTML = cities;
                                        
                                    }
                            });
                    };
            };
        </script>
    
    </body>
    
    </html>
И вот код скрипта на python:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    #!/usr/bin/env python3
    
    import cgi
    import sqlite3
    
    conn = sqlite3.connect("comm.db")
    cursor = conn.cursor()
    
    receive = cgi.FieldStorage()
    id_region = int(receive.getvalue("id_region"))
    
    cursor.execute("SELECT city FROM cities WHERE region_id=?", (id_region,))
    data = cursor.fetchall()
    
    print(data)
Подскажите, пожалуйста, что я не так сделал. Заранее спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.03.2018, 20:58
Ответы с готовыми решениями:

Python двухмерные списки. Создать список с элементами akn
Создать список с элементами akn=n f ( k ) + sin ( k ) g (n), где k, n =1, 2, 3, 4; f(k)=13,4sin(-1,26)cos|k/7,5| ...

AJAX: Зависимые списки
Доброго времени суток. У меня на сайте есть выбор из списка факультетов (select) который загружается из БД с помощью PHP. ...

Не могу получить ответ на ajax запрос от контроллера
в ajax приходит error, если передавать данные в контроллер - все приходит, обратно - error. Контроллер @Controller ...

6
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
19.03.2018, 06:01
Лучший ответ Сообщение было отмечено makkson как решение

Решение

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
$.ajax({
    type: "GET",
    url: "../cgi-bin/select_city.py",
    data: {'id_region': id_region},
    dataType: "json",
    success: function(ls) {
        var html = '';
        $.each(ls, function (i, d){
            html += '<option value="' + d.id + '">' + d.value + '</option>';
        });
        document.comm_send.city.innerHTML = html;
    }
});
Python
1
2
3
4
5
from json import JSONEncoder
#...
cursor.execute("SELECT id, city as value FROM cities WHERE region_id=?", (id_region,))
data = cursor.fetchall()
print(JSONEncoder.encode(data))
1
0 / 0 / 0
Регистрация: 12.12.2014
Сообщений: 9
19.03.2018, 10:38  [ТС]
Рыжий Лис,
js код вставил без изменений
python поправил, ide ругался на отсутствие скобочек в принте после JSONEncoder
Python
1
print(JSONEncoder().encode(data))
Но поля не подгружаются в форму все равно,ошибки никакие не вылетают, ни в python, ни в js
такое ощущение что ajax в ответ ничего не получает
ответ от python идет такой:
Python
1
[["\u0420\u043e\u0441\u0442\u043e\u0432"], ["\u0428\u0430\u0445\u0442\u044b"], ["\u0411\u0430\u0442\u0430\u0439\u0441\u043a"]]
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
19.03.2018, 11:26
Лучший ответ Сообщение было отмечено makkson как решение

Решение

Питон должен был возвращатить:
JSON
1
2
3
4
5
6
7
8
9
10
[
{
  id:1,
  value:"город1"
},
{
  id:2,
  value:"город2"
}
]
Может sql не подправили? В data должен лежать список со словарями.
1
0 / 0 / 0
Регистрация: 12.12.2014
Сообщений: 9
19.03.2018, 11:29  [ТС]
Рыжий Лис,
да, верно, sql не поправил, сори
сейчас питон возвращает
Python
1
[[1, "\u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440"], [2, "\u041a\u0440\u043e\u043f\u043e\u0442\u043a\u0438\u043d"], [3, "\u0421\u043b\u0430\u0432\u044f\u043d\u0441\u043a"]]
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
19.03.2018, 11:33
Лучший ответ Сообщение было отмечено makkson как решение

Решение

Да, думаю, сойдёт. Добавь перед выводом данных заголовок:
Python
1
print('Content-Type: application/json\n\n')
И тогда в js:
JavaScript
1
2
3
        $.each(ls, function (i, d){
            html += '<option value="' + d[0] + '">' + d[1] + '</option>';
        });
1
0 / 0 / 0
Регистрация: 12.12.2014
Сообщений: 9
19.03.2018, 11:37  [ТС]
вот отлично все, заработало
Огромное спасибо!
Итого код js:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function selectRegion(){
                var id_region = $('select[name="region"]').val();
                if(!id_region){
                        $('div[name="selectDataRegion"]').html('');
                }
                else {
                    $.ajax({
                        type: "GET",
                        url: "../cgi-bin/select_city.py",
                        data: {'id_region': id_region},
                        dataType: "json",
                        success: function(ls) {
                            var html = '';
                            $.each(ls, function (i, d){
                                html += '<option value="' + d[0] + '">' + d[1] + '</option>';
                            });
                            document.comm_send.city.innerHTML = html;
                        }   
                    });
                };
        };
и код питон:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/env python3
 
import cgi
import sqlite3
from json import JSONEncoder
 
conn = sqlite3.connect("comm.db")
cursor = conn.cursor()
 
receive = cgi.FieldStorage()
id_region = receive.getvalue("id_region")
 
cursor.execute("SELECT id, city as value FROM cities WHERE region_id=?", (id_region,))
data = cursor.fetchall()
 
print('Content-Type: application/json\n\n')
print(JSONEncoder().encode(data))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.03.2018, 11:37
Помогаю со студенческими работами здесь

Запуск скрипта написанного на python на windows, где не установлен python
Не запускается скрипт на Windows, где не установлен python. Команда в коде на выполнение написана так: def Adminnewpriglash(): ...

Как из Python скрипта выполнить другой python скрипт?
Как из Python скрипта выполнить другой python скрипт? Если он находится в той же папке но нужно передать еще передать скрипту аргументы.

Двумерные списки в Python, не могу разобраться
Здравствуйте! Здравствуйте! Столкнулась с тем, что не получается создать двумерный массив, записывая данные из файла. Дан файл...

Python - найти список значений ключей словаря вложенного в списки
Добрый день уважаемые форумчане. Вопрос такой: Есть список - d, и список ключей l: d = , , , ] l =

Можно ли получить строки после компиляции Python 3 скрипта
У меня есть некоторый скрипт написанный на Python, с большим набором функций, классов и импортированных библиотек. В некоторой строчке кода...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru