2011-10-07 161 views
11

想象一下,當需要更改下拉列表時,您需要編寫一些Javascript,這些Javascript只是更改一組複選框。在Python和Javascript之間傳遞變量

根據在列表中選擇哪個項目,某些複選框將被選中/取消選中。

在後面,你有Python代碼以及一些SQLAlchemy。

Javascript需要像往常一樣識別列表中選定的項目,將其發送回Python模塊,該模塊然後將使用某些SQLAlchemy中的變量返回需要檢查的複選框列表,即「用戶選擇」福特',所以複選框'焦點','蒙迪歐','嘉年華'需要檢查「

問題我的是,我似乎無法找到一種方法來訪問python模塊從Javascript而不轉換div到一個迷你瀏覽器頁面並將包含變量的url傳遞給它!

有沒有人有關於這應該如何工作的任何想法?

回答

9

好笑的是,我有網頁與討論使用SQLAlchemy的Python CGI模塊的JavaScript。

我所做的是發送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

python有一個json模塊,它非常適合這種情況。

使用良好的舊AJAX,以json作爲數據格式將允許您在javascript和您的python模塊之間交換數據。

(除非你的Python模塊在客戶端運行,但後來我不明白你怎麼可以從瀏覽器中執行它...)