2011-10-07 18 views
11

Immaginate di dover scrivere qualche Javascript che modifichi semplicemente un insieme di checkbox quando viene modificato un elenco a discesa.Passaggio di variabili tra Python e Javascript

A seconda dell'elemento selezionato nell'elenco, alcune delle caselle di controllo verranno selezionate/deselezionate.

Nella parte posteriore, si dispone di codice Python insieme ad alcuni SQLAlchemy.

Il Javascript deve identificare come sempre l'elemento selezionato nell'elenco, inviarlo di nuovo al modulo Python che utilizzerà quindi la variabile in alcuni SQLAlchemy per restituire un elenco di caselle di controllo che devono essere controllate, ad esempio "Utente selezionato" Ford ', quindi le caselle di controllo' Focus ',' Mondeo ',' Fiesta 'devono essere controllate "

Il problema che sto avendo è che non riesco a trovare un modo per accedere ai moduli python da Javascript senza trasformare un div in una mini pagina del browser e passando un url contenente le variabili in esso!

Qualcuno ha qualche idea su come dovrebbe funzionare?

risposta

9

pagine web divertente, ho con JavaScript che parla ai moduli CGI Python che usano SQLAlchemy.

Quello che faccio è inviare richiesta AJAX ma con richiesta JSON nel corpo anziché XML. I moduli CGI Python utilizzano il modulo standard json per deserializzare JSON in un dizionario.

JavaScript lato si presenta così:

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

e Python come questo:

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, non utilizza il modulo CGI Python, dal momento che l'intera richiesta è passato come JSON nel corpo.

4

python ha un modulo json, che si adatta perfettamente a questo scenario.

utilizzando un buon vecchio AJAX, con json come il formato dei dati vi permetterà di scambiare dati tra javascript e il modulo python.

(a meno che il modulo Python è in esecuzione sul lato client, ma d'altra parte non vedo come si potrebbe eseguirlo dal browser ...)

Problemi correlati