我正在創建一個非常簡單的演示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