2017-07-27 111 views
-1

我是網絡編程新手,我正在學習如何在Python服務器和JavaScript客戶端之間發送消息。爲什麼在python服務器上收到JSON消息爲None?

我找到了以下指南:http://www.makeuseof.com/tag/python-javascript-communicate-json/,它指導您如何使用燒瓶創建python服務器以及如何使用AJAX和JQuery向其發送請求。

服務器Python代碼(從與修改引導):

#!flask/bin/python 

import sys 

from flask import Flask, render_template, request, redirect, Response 
import random, json 

app = Flask(__name__) 


@app.route('/') 
def output(): 
    # serve index template 
    return render_template('index.html', name='Joe') 


@app.route('/receiver', methods = ['POST']) 
def worker(): 
    print("execute worker()") 
    # read json + reply 
    data = request.get_json() 
    print("data = "+str(data)) 
    if data is None: 
     return "Recieved data as None" 
    result = '' 

    for item in data: 
     # loop over every row 
     result += str(item['make']) + '\n' 

    return result 

if __name__ == '__main__': 
    # run! 
    app.run() 

客戶端側(命名爲從與修改引導 「的index.html」,也):

<!DOCTYPE html> 
<html lang="en"> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 
<script type="text/javascript"> 
    console.log("started script"); 
// setup some JSON to use 
var cars = [ 
    { "make":"Porsche", "model":"911S" }, 
    { "make":"Mercedes-Benz", "model":"220SE" }, 
    { "make":"Jaguar","model": "Mark VII" } 
]; 

window.onload = function() { 
    // setup the button click 
    document.getElementById("theButton").onclick = function() { 
     doWork() 
    }; 
    console.log("executed window.onload successfully"); 
} 

function doWork() { 
    // ajax the JSON to the server 
    $.post("receiver", cars, function(){ 

    }); 
    // stop link reloading the page 
event.preventDefault(); 
console.log("executed doWork successfully"); 
} 
console.log("ended script"); 
</script> 
This will send data using AJAX to Python:<br /><br /> 
<a href="" id="theButton">Click Me</a> 

</html> 

當我在我的本地主機上上傳index.html,它會向控制檯輸出除「執行成功」之外的所有消息,這很有道理。

但是,當我點擊按鈕(一個ID爲「theButton」的元素),它刷新頁面,並不打印該消息。另外,在服務器端,我得到了「data = None」,並且當我在開發人員工具的網絡中的響應選項卡中檢查響應時,有時會收到「收到的數據爲無」,有時甚至沒有。

任何人都可以幫助我理解這種行爲嗎?我一步步跟着這個指南,但我找不到我的錯誤。

回答

1

編輯:原來的解決方案是錯誤的,你應該參考鏈接的問題,jQuery posting JSON

附加背景:Flask不會拋出任何異常。您還可以使用「網絡」選項卡檢查Chrome 發送的(請參閱How can I debug a HTTP POST in Chrome?)。

+0

嗨,謝謝你的迴應。 我試圖添加你所說的,但它仍然不起作用。當我檢查網絡選項卡(我使用Firefox)中的響應時,我收到「收到的數據爲無」響應。你知道爲什麼嗎?此外,有時我會得到一個綠色的地位,有時灰色,這似乎沒有發生什麼事或什麼... – Yair

+0

檢查你** **之前,你收到。 –

+0

由於您的問題已被標記爲重複,請查看鏈接問題顯示的內容。我不是jQuery的專家。 –

相關問題