我有一个烧瓶python应用程序,而简化版本看起来像这样:
import json
from flask import Flask
app = Flask(__name__)
@app.route('/1')
def someFunction():
return json.dumps([{'name': 'test1', 'parameter': 'none1'},{'name': 'test2', 'parameter': 'none2'}])
if __name__ == '__main__':
app.run(debug = True)
当我运行它并打开http://127.0.0.1:5000/1时,我会在Chrome中获得格式正确的json文件。现在我希望ajax将JSON文件加载到我的网页中。我知道由于使用不同的端口我必须使用jsonp。在我的jQuery代码下面:
$.ajax({
url: "http://127.0.0.1:5000/1",
dataType: 'jsonp',
contentType: 'application/jsonp; charset=utf-8',
// go through the data
success: function(data){
console.log("success");
},
error: function (data) {
console.log("fail");
}
})

现在,当被调用时,返回"失败"。而且我不确定为什么。我能看到的唯一区别在于烧瓶日志。当我通过Chrome访问网站时,我得到:
127.0.0.1 - - [07/Aug/2017 14:29:08] "GET /1 HTTP/1.1" 200 -
当我运行AJAX查询时,烧瓶显示:
127.0.0.1 - - [07/Aug/2017 14:29:18] "GET /1?callback=jQuery1124005765263480826932_1502108954854&_=1502108954855 HTTP/1.1" 200 -
我愿意在这里提出建议,我遇到了这些不同端口的问题,但是使用jsonp解决了这个问题(没有更多的错误。)。但是,我不确定加载失败的原因。
答案 0 :(得分:0)
尝试使用jsonify()
使用python对象中的正确HTTP标头创建JSON响应。在您的控制器中,它将是:
from flask import jsonify
@app.route('/1')
def someFunction():
return jsonify([{'name': 'test1'}])
在您的前端,您只需要dataType: json
。
$.ajax({
url: "/1",
dataType: "json",
success: function(data){
console.log("success");
},
error: function (data) {
console.log("fail");
}
})
另请注意,您不需要在网址中填写完整的http://localhost:5000
。 /1
会自动解决此问题。