2016-12-16 101 views
1

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

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() 

这里是Ajax调用:

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

但是这使得调用这个网址,导致404我怎样才能解决这个问题?只是提到CORS不是问题。

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

回答

3

试着改变你的url属性设置为

url: "http://mypythonapp-spacepirate.rhcloud.com/hello/world", 

然后你会得到一个200响应状态,而不是404的原因是你创建的烧瓶路由具有招呼后所需的参数/ 。

编辑:跟帖质疑有关使用变量的数据

  • 方法一:刚刚参数添加编码到URL

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

  • 方法2:使用data参数来阿贾克斯呼叫,因为你已经开始做。我想认为,jquery会将它翻译成get的URL查询字符串,就像这样。注意?划定查询字符串的开头:

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

    您可以验证通过在浏览器开发者工具检查和看到的URL的AJAX调用实际上请求。另请注意,在烧瓶处理程序中,您需要检查request.query_string以获取数据,因为<name>参数将为空。

+0

这个工程,我试过像这样: –

+0

很酷!请将我的答案标记为已接受,或者赞扬我的回答,因为这是对SO说'谢谢'的最佳方式。 –

+0

只是好奇,无论如何通过传递数据来实现这一点,而不是直接修改url? –

0

使用Alex G Rice提供的指导和答案在这里Python Flask how to get parameters from a URL?我发现了如何将数据直接传递如下:

Ajax调用:

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

蟒蛇文件:

@app.route('/hello/', methods=['GET','POST']) 
def hello_world(name=None): 
    buf1 = request.args.get('name') 
    str = {'key':'Hello World!', 'q':buf1} 
    #out = {'key':str} 
    res = json.dumps(str) 
    return res