Передача переменных между Python и Javascript - PullRequest
13 голосов
/ 07 октября 2011

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

В зависимости от того, какой элемент выбран в списке, некоторые из флажков станут отмеченными /unchecked.

В конце у вас есть код Python вместе с некоторой SQLAlchemy.

Javascript должен идентифицировать выбранный элемент в списке, как обычно, отправить его обратно в модуль Python, который будетзатем используйте переменную в некоторой SQLAlchemy, чтобы вернуть список флажков, которые необходимо установить, т. е. «Пользователь выбрал« Ford », поэтому необходимо установить флажки« Фокус »,« Mondeo »,« Fiesta »»

У меня проблема в том, что я не могу найти способ получить доступ к модулям Python из Javascript, не превращая div в страницу мини-браузера и не передавая в нее URL-адрес, содержащий переменные!

У кого-нибудь есть идеи?о том, как это должно работать?

Ответы [ 2 ]

10 голосов
/ 07 октября 2011

Забавно, у меня есть веб-страницы с JavaScript, которые общаются с модулями Python CGI, использующими SQLAlchemy.

Что я делаю, так это отправляю запрос AJAX, но с запросом JSON в теле вместо XML. Модули Python CGI используют стандартный модуль json для десериализации JSON в словарь.

сторона JavaScript выглядит так:

function on_request_success(response) {
    console.debug('response', response);
} 

function on_request_error(r, text_status, error_thrown) {
    console.debug('error', text_status + ", " + error_thrown + ":\n" + r.responseText);
}

var request = { ... };
jQuery.ajax({
    url: 'http://host/whatever.cgi',
    type: 'POST',
    cache: false,
    data: JSON.stringify(request),
    contentType: 'application/json',
    processData: false,
    success: on_request_success,
    error: on_request_error
});

И Python вот так:

request = json.load(sys.stdin)
response = handle_request(request)
print("Content-Type: application/json", end="\n\n")
json.dump(response, sys.stdout, indent=2)

Обратите внимание, он не использует модуль Python cgi, поскольку весь запрос передается в теле в виде JSON.

4 голосов
/ 07 октября 2011

python имеет модуль json, который идеально подходит для этого сценария.

с использованием старого доброго AJAX с json в качестве формата данных позволит вам обмениваться данными между javascript и вашим модулем python.

(если только ваш модуль python не работает на стороне клиента, но тогда я не вижу, как вы могли бы выполнить его из браузера ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...