2011-10-07 12 views
11

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

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

В задней части у вас есть код Python вместе с некоторыми SQLAlchemy.

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

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

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

ответ

9

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

Что я делаю, это отправить запрос AJAX, но с запросом JSON в теле вместо XML. Модули CGI Python используют стандартный модуль 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) 

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

4

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

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

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

Смежные вопросы