Jquery 为什么在python服务器上接收到的JSON消息为None?
我是网络编程新手,我正在尝试学习如何在python服务器和JavaScript客户端之间发送消息 我找到了以下指南:,它指导您如何使用flask创建python服务器,以及如何使用AJAX和JQuery向其发送请求 服务器python代码(来自指南中的修改): 客户端(名为“index.html”,也来自指南中的修改):Jquery 为什么在python服务器上接收到的JSON消息为None?,jquery,python,json,ajax,flask,Jquery,Python,Json,Ajax,Flask,我是网络编程新手,我正在尝试学习如何在python服务器和JavaScript客户端之间发送消息 我找到了以下指南:,它指导您如何使用flask创建python服务器,以及如何使用AJAX和JQuery向其发送请求 服务器python代码(来自指南中的修改): 客户端(名为“index.html”,也来自指南中的修改): log(“启动脚本”); //设置一些要使用的JSON var cars=[ {“品牌”:“保时捷”,“车型”:“911S”}, {“make”:“Mercedes-Benz
log(“启动脚本”);
//设置一些要使用的JSON
var cars=[
{“品牌”:“保时捷”,“车型”:“911S”},
{“make”:“Mercedes-Benz”,“model”:“220SE”},
{“品牌”:“捷豹”,“车型”:“Mark VII”}
];
window.onload=函数(){
//设置按钮单击
document.getElementById(“theButton”).onclick=function(){
嫁妆
};
log(“已成功执行window.onload”);
}
函数doWork(){
//ajax将JSON发送到服务器
$.post(“接收器”、车辆、功能(){
});
//停止链接重新加载页面
event.preventDefault();
log(“已成功执行doWork”);
}
console.log(“结束脚本”);
这将使用AJAX向Python发送数据:
当我在本地主机上上传index.html时,它会将所有消息打印到控制台,除了“executed doWork successfully”(这很有意义)
但当我点击按钮(一个id为“theButton”的元素)时,它会刷新页面,而不会打印该消息。此外,在服务器端,我得到了“data=None”,当我在developer tools的网络中的response选项卡中检查响应时,有时我得到了“receiveddataasnone”,有时什么也没有
有人能帮我理解这种行为吗?我一步一步地遵循这个指南,但我就是找不到我的错误。编辑:原来的解决方案是错误的,你应该参考链接的问题
附加背景:不会引发任何异常。您还可以使用网络选项卡(请参阅)查看Chrome发送的内容。您好,谢谢您的回复。我试着补充你说的话,但还是不起作用。当我在网络选项卡(我使用Firefox)中检查响应时,我得到“接收数据为无”响应。你知道为什么吗?此外,有时我的状态是绿色的,有时是灰色的,看起来好像什么都没发生或什么……在收到之前先检查你发送的内容。由于你的问题被标记为重复,请查看链接问题显示的内容。我不是jQuery方面的专家。我尝试过检查,但问题是当我按下按钮时,它似乎会刷新整个页面。注意,我在函数中添加了一个控制台打印,它应该表示函数doWork()已经执行,但它没有打印。而是在发送信号时重新加载页面。如果您需要保留日志,请选中网络选项卡中的“保留日志”。
#!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()
<!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>