簡體   English   中英

在 Python 和 Javascript 之間傳遞變量

[英]Passing variables between Python and Javascript

想象一下,您需要編寫一些 Javascript 來在更改下拉列表時簡單地更改一組復選框。

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

在后面,你有 Python 代碼和一些 SQLAlchemy。

Javascript 需要像往常一樣識別列表中的選定項目,將其發送回 Python 模塊,然后 Python 模塊將使用一些 SQLAlchemy 中的變量返回需要檢查的復選框列表,即“用戶選擇了‘福特’,所以復選框“焦點”、“蒙迪歐”、“嘉年華”需要被選中”

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

有人對這應該如何工作有任何想法嗎?

有趣的是,我有一些帶有 JavaScript 的網頁,這些網頁與使用 SQLAlchemy 的 Python CGI 模塊對話。

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

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

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

(除非您的 python 模塊在客戶端運行,但是我看不到您如何從瀏覽器執行它...)

Ajax 是在 python 和 javascript 之間傳遞變量的好方法。 Javascript:

 param = {a:'hello', b: 'world', c: '!'}
   

        $.ajax({
            type: "post",
            url: "scpi.py",
            cache: false,
            async: 'asynchronous',
            dataType: 'html',
            data: param,
            success: function(data) {
                console.log(data)
               
            },
            error: function(request, status, error){
                console.log("Error: " + error)
            }
        })

Server.py:(你需要三個函數才能工作)

    def do_POST(self):
    if "scpi.py" in self.path:
        form = cgi.FieldStorage(
            fp=self.rfile,
            headers=self.headers,
            environ={'REQUEST_METHOD': 'POST'}
        )
        a = form['a'].value
        b = form['b'].value
        c = form['c'].value

        content = myfunction(a, b, c)
        self.respond(content)      

def handle_http(self, data):
    self.send_response(200)
    self.send_header('Content-type', 'application/json')
    self.end_headers()
    print(data)
    return bytes(str(data), 'UTF-8')
    
def respond(self, data):
    response = self.handle_http(data)
    print(data)

僅供參考:“myfunction(a, b, c,)”是來自另一個 python 文件的函數,然后返回數據並傳遞給 self.respond 以發送回 javascript

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM