2016-12-16 98 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