我正在创建一个非常简单的演示Web应用程序。我想要的只是按下按钮,并将消息从前端移到后端,然后传回前端。没有什么花哨。Ajax JSON请求始终不发送?
我无法在Pyhton/Flask中获取“data1”(在JS中)。我不确定这个问题是由我如何从JS发送它或我如何在Python中访问它。根据我读过的其他问题,我似乎正在做的正确。在JS中,我使用data : JSON.stringify(data1)
发送,而在Python中,我使用data = request.json
访问。那么这里有什么问题?
我尝试过使用request.json,request.get_json()来访问它,并试图在没有JSON的情况下做它,只是发送“数据”,并通过request.form.get('word')来访问它。但这些似乎都不起作用。
CMD线输出:
[email protected]:~/Desktop/flaskwebapp$ python webapp_starter.py
* Running on http://127.0.0.1:8000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger pin code: 276-649-445
127.0.0.1 - - [28/May/2017 10:48:49] "GET/HTTP/1.1" 200 -
<Request 'http://127.0.0.1:8000/examplemethod' [POST]>
data None
127.0.0.1 - - [28/May/2017 10:48:54] "POST /examplemethod HTTP/1.1" 500 -
Traceback (most recent call last):
File "/home/castro/anaconda2/lib/python2.7/site-packages/flask/app.py", line 1994, in __call__
return self.wsgi_app(environ, start_response)
File "/home/castro/anaconda2/lib/python2.7/site-packages/flask/app.py", line 1985, in wsgi_app
response = self.handle_exception(e)
File "/home/castro/anaconda2/lib/python2.7/site-packages/flask/app.py", line 1540, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/castro/anaconda2/lib/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/home/castro/anaconda2/lib/python2.7/site-packages/flask/app.py", line 1615, in full_dispatch_request
return self.finalize_request(rv)
File "/home/castro/anaconda2/lib/python2.7/site-packages/flask/app.py", line 1630, in finalize_request
response = self.make_response(rv)
File "/home/castro/anaconda2/lib/python2.7/site-packages/flask/app.py", line 1725, in make_response
raise ValueError('View function did not return a response')
ValueError: View function did not return a response
此错误显然是因为数据是通过使用在request.json烧瓶中的分配始终分配None
。所以真正的错误似乎是在正确地从JS获取数据到Python。
HTML
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script type="text/javascript" src="static/example.js"></script>
</head>
<body>
<h1 class="title">Heading</h1>
<p>a paragraph of text bla bla bla</p>
<button id="btn"> CLICK ME! </button>
</body>
</html>
的Javascript:
"use strict";
console.log("On load");
var main = function() {
var run_method = function(){
var data1 = {"word":"hello"}
console.log("Before " + data1);
$.ajax({
url : "/examplemethod",
type : "POST",
data : JSON.stringify(data1),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
})
.done(function(data){
// Parse out image info
var data = JSON.parse(data);
console.log(data);
});
}
$("#btn").on("click",function(){
//event.preventDefault();
run_method()
})
}
$(document).ready(main);
的Python /瓶:
from flask import Flask, render_template,request
#Init flask server
app = Flask(__name__)
@app.route("/")
def initialize():
'''
Initialize the page
IN: None
OUT: None (loads page)
'''
#render page from html
return render_template('index.html')
@app.route("/examplemethod", methods=['POST', 'GET'])
def example_method():
global data
if request.method == 'POST':
print request
data = request.json
#request.form.get('word')
print "data", data
return data
if __name__ == '__main__':
app.run(host="127.0.0.1", port=int("8000"), debug=True)
尝试发送数据没有stringify –
我做了,并使用request.form.get('word')来访问它,因为我说也没有工作。 –
Priyesh意味着发送数据没有stringify,但仍然从烧瓶访问它作为'request.json',我认为jQuery的'ajax'调用内部的字符串化 – niceman