使用AJAX jsonp加载JSON不会产生任何结果

时间:2017-08-07 12:46:44

标签: jquery html json flask

我有一个烧瓶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解决了这个问题(没有更多的错误。)。但是,我不确定加载失败的原因。

1 个答案:

答案 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会自动解决此问题。