2011-10-07 14 views
11

Imagine que necesita escribir algo de Javascript que simplemente cambie un conjunto de casillas de verificación cuando se modifique una lista desplegable.Pasando variables entre Python y Javascript

Según el elemento seleccionado en la lista, algunas de las casillas de verificación se marcarán/desmarcarán.

En la parte posterior, tiene el código de Python junto con algunos SQLAlchemy.

El Javascript necesita identificar el elemento seleccionado en la lista como de costumbre, enviarlo de vuelta al módulo Python que luego usará la variable en alguna SQLAlchemy para devolver una lista de casillas que deben ser revisadas, es decir, "Usuario seleccionado" Ford ', por lo que las casillas de verificación' Enfoque ',' Mondeo ',' Fiesta 'deben ser revisadas "

El problema que tengo es que no puedo encontrar una manera de acceder a los módulos de python desde el Javascript sin convertir un div en una mini página del navegador y pasando una URL que contiene variables en ella!

¿Alguien tiene alguna idea sobre cómo debería funcionar esto?

Respuesta

9

páginas web divertido, tengo con JavaScript que habla con los módulos Python CGI que usan SQLAlchemy.

Lo que hago es enviar una solicitud AJAX pero con la solicitud JSON en el cuerpo en lugar de XML. Los módulos Python CGI usan el módulo estándar json para deserializar JSON en un diccionario.

JavaScript del lado ve así:

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 
}); 

y Python como esto:

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

Nota, que no utiliza módulo de CGI Python, ya que toda la solicitud se pasa como JSON en el cuerpo.

4

python tiene un módulo json, que es un ajuste perfecto para este escenario.

usando un viejo AJAX, con json ya que el formato de datos le permitirá intercambiar datos entre javascript y su módulo de python.

(a menos que su módulo de Python se ejecuta en el lado del cliente, pero entonces no veo cómo se puede ejecutarlo desde el navegador ...)

Cuestiones relacionadas