Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: Web
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
makkson
0 / 0 / 0
Регистрация: 12.12.2014
Сообщений: 9
1

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

18.03.2018, 20:58. Просмотров 1459. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2018, 20:58
Ответы с готовыми решениями:

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

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

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

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

Создать функцию с произвольным именем во время выполнения python скрипта
Предположим во время выполнения python скрипта нужно создать функцию с произвольным именем,...

6
Рыжий Лис
Просто Лис
2174 / 1157 / 549
Регистрация: 17.05.2012
Сообщений: 3,948
Записей в блоге: 9
19.03.2018, 06:01 2
Лучший ответ Сообщение было отмечено 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
makkson
0 / 0 / 0
Регистрация: 12.12.2014
Сообщений: 9
19.03.2018, 10:38  [ТС] 3
Рыжий Лис,
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
Рыжий Лис
Просто Лис
2174 / 1157 / 549
Регистрация: 17.05.2012
Сообщений: 3,948
Записей в блоге: 9
19.03.2018, 11:26 4
Лучший ответ Сообщение было отмечено makkson как решение

Решение

Питон должен был возвращатить:
JSON
1
2
3
4
5
6
7
8
9
10
[
{
  id:1,
  value:"город1"
},
{
  id:2,
  value:"город2"
}
]
Может sql не подправили? В data должен лежать список со словарями.
1
makkson
0 / 0 / 0
Регистрация: 12.12.2014
Сообщений: 9
19.03.2018, 11:29  [ТС] 5
Рыжий Лис,
да, верно, 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
Рыжий Лис
Просто Лис
2174 / 1157 / 549
Регистрация: 17.05.2012
Сообщений: 3,948
Записей в блоге: 9
19.03.2018, 11:33 6
Лучший ответ Сообщение было отмечено 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
makkson
0 / 0 / 0
Регистрация: 12.12.2014
Сообщений: 9
19.03.2018, 11:37  [ТС] 7
вот отлично все, заработало
Огромное спасибо!
Итого код 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
19.03.2018, 11:37
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2018, 11:37

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

Python + requests не могу получить все куки
Доброго вечера пытаюсь получить куки, написал такой скрипт: import requests s =...

Python - не могу создать резервную копию
Вводится такой код (по задаче из книги Swaroop`a.) Cама задача: Составить программу, которая...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.