我通过jquery收到了一个ajax请求,如下所示:
$.ajax({
headers: {"Content-Type": "application/json"},
url: '127.0.0.1:5000/runNetwork?schema=moscow&consumer=BUILDING_1',
dataType: 'jsonp',
success: function(response) {
console.log(response);
},
error: function(response, error) {
console.log(response);
console.log(error);
}
});
这是它想要得到的服务,写在烧瓶里:
from flask import Flask, jsonify, abort, request
app = Flask(__name__)
#Example query: 127.0.0.1:5000/runNetwork?schema=moscow&consumer=BUILDING_1
@app.route('/runNetwork', methods=['GET'])
def run_network():
summary = request.args.get('schema')
change = request.args.get('consumer')
json = jsonify({"schema" : summary, "consumer" : change})
return json
if __name__ == "__main__":
app.run(debug=True)
当我试图单击执行ajax请求的按钮时,它失败了,我得到了一个看起来不包含任何信息的奇怪对象:
{â¦}
abort: function abort()
always: function always()
catch: function catch()
done: function add()
fail: function add()
getAllResponseHeaders: function getAllResponseHeaders()
getResponseHeader: function getResponseHeader()
overrideMimeType: function overrideMimeType()
pipe: function pipe()
progress: function add()
promise: function promise()
readyState: 0
setRequestHeader: function setRequestHeader()
state: function state()
status: 0
statusCode: function statusCode()
statusText: "error"
then: function then()
__proto__: Object { ⦠}
我可以扩展所有这些选项,但它们都包含
length
以及
name
属性,长度始终为0或1,名称只是要返回的对象中的项的名称(即
abort
有一个
名称
属性已调用
中止
.
我觉得很困惑的是,当我复制并粘贴完全相同的URL时,似乎没有什么问题(
127.0.0.1:5000/runNetwork?schema=moscow&consumer=BUILDING_1
)在浏览器中,我可以毫无问题地获取JSON。
我真的不知道在这一点上还能做什么,烧瓶日志上没有其他的信息。
我刚刚注意到的另一点是,请求甚至似乎没有发送到服务器,因为运行flask服务器的Pycharm控制台正在打印:
127.0.0.1 - - [11/Jun/2018 20:46:10] "GET /runNetwork?schema=moscow&consumer=BUILDING_1 HTTP/1.1" 200 -
每当我将查询输入到地址栏时,但当我试图通过ajax请求访问它时,它不会出现。
我越来越沮丧和绝望,所以我试图从服务器上得到一些东西-任何东西-回来。我将请求更改为如下所示的POST类型:
from flask import Flask, jsonify, abort, request, Response
app = Flask(__name__)
#Example query: 127.0.0.1:5000/runNetwork?schema=moscow&consumer=BUILDING_1
@app.route('/runNetwork', methods=['GET', 'POST'])
def run_network():
foo = request.form['foo']
json = jsonify({"schema": foo})
return json
if __name__ == "__main__":
app.debug = True
app.run(host='0.0.0.0', port=5005, threaded=True)
和
$.ajax({
url: "127.0.0.1:5005/runNetwork",
method: "POST",
data: { foo : "bar" },
success: function(response) {
console.log(response);
},
error: function(response, error) {
console.log(response)
console.log(error);
}
});
它仍然返回相同的错误。
找到解决方案
一直都在我眼皮底下。烧瓶服务器地址需要加上前缀
http://
在ajax请求中:
$.ajax({
url: "http://127.0.0.1:5005/runNetwork",
method: "POST",
data: { foo : "bar" },
success: function(response) {
console.log(response);
},
error: function(response, error) {
console.log(response)
console.log(error);
}
});
之所以将它粘贴到地址栏中,是因为Firefox非常有帮助,并且在导航之前自动预置地址。