我有一个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
有一个名为name
的{{1}}属性。
我发现对此非常困惑的是,当我将完全相同的URL(abort
)复制并粘贴到浏览器中时,似乎没有任何错误,我得到了JSON,没有任何问题。
此时我真的不知道该做什么,烧瓶日志中没有打印其他信息。
我刚才注意到的其他事情,请求似乎甚至没有进入服务器,因为我正在运行烧瓶服务器的Pycharm控制台正在打印这个:
127.0.0.1:5000/runNetwork?schema=moscow&consumer=BUILDING_1
每当我将查询输入地址栏时,但当我尝试通过ajax请求访问它时,它不会出现。
我感到沮丧和绝望,所以我想要从服务器回来的东西 - 任何事情。我将请求更改为POST类型,如下所示:
127.0.0.1 - - [11/Jun/2018 20:46:10] "GET /runNetwork?schema=moscow&consumer=BUILDING_1 HTTP/1.1" 200 -
和
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)
并且STILL返回相同的错误。
一直在我的鼻子底下。烧瓶服务器地址需要在ajax请求中以$.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://
将它粘贴到地址栏时成功的原因是firefox一直非常有用,并且在导航之前会自动为地址添加前缀。