对Flask服务的Ajax GET请求失败并返回奇怪的空对象,但粘贴到地址栏

时间:2018-06-11 17:46:19

标签: jquery ajax flask

我有一个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 { … }

我可以扩展所有这些选项,但它们只包含lengthname属性,长度始终为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一直非常有用,并且在导航之前会自动为地址添加前缀。

0 个答案:

没有答案