使用AJAX调用Flask API

Pay*_*ari 3 javascript python ajax jquery openshift

我正在试验Flask和AJAX,这里有一条简单的API路由,托管在OpenShift上。我想使用Ajax在Javascript文件中调用API。OpenShift Python文件很简单:

from flask import Flask
app = Flask(__name__)

import json

@app.route('/hello/<name>')
def hello_world(name=None):
    str = {'key':'Hello World!', 'q':name}
    #out = {'key':str}
    res = json.dumps(str)
    return res

if __name__ == '__main__':
    app.run()
Run Code Online (Sandbox Code Playgroud)

这是Ajax调用:

$.ajax({
    type:"GET",
    dataType: "json",
    data:'Payam',
    url: "http://mypythonapp-spacepirate.rhcloud.com/hello/",
    success: function(data){
        buf1=data;
        console.log(data);
    }
})
Run Code Online (Sandbox Code Playgroud)

但这会调用此URL,结果为404。如何解决此问题?仅提及CORS并不是问题。

http://mypythonapp-spacepirate.rhcloud.com/hello/?Payam
Run Code Online (Sandbox Code Playgroud)

Ale*_*ice 5

尝试将您的url属性更改为

url: "http://mypythonapp-spacepirate.rhcloud.com/hello/world",
Run Code Online (Sandbox Code Playgroud)

然后您将获得200的响应状态,而不是404。原因是您创建的烧瓶路由在hello /之后具有必需的参数。

编辑:关于对数据使用变量的问题的跟进

  • 方法1:只需将参数编码添加到URL

    url: "http://mypythonapp-spacepirate.rhcloud.com/hello/" + encodeURIComponent(xyz)

  • method2:开始使用时,将data参数用于ajax调用。我认为 jquery会将其转换为的URL查询字符串get,如下所示。注意?分隔查询字符串的开始:

    http://mypythonapp-spacepirate.rhcloud.com/hello/?xyz

    您可以通过签入浏览器开发工具并查看ajax调用实际请求的URL来进行验证。还要注意,在烧瓶处理程序中,您将需要检查request.query_string以获取数据,因为<name>参数为空。