从Flask服务器获取Ajax GET后的数据
我正在尝试使用Flask和Ajax。在服务器端,我有一个非常简单的网页应用,它的功能是将传入的数字翻倍并返回。我是根据Flask网站上的示例写的。以下是Python代码:
from flask import Flask, request, jsonify
# Initialize the application
app = Flask(__name__)
# Route that receives and processes the Ajax request
@app.route('/')
def index():
print 'In index()'
data = request.args.get('data', 0, type=int)
print 'Received Ajax post - Data: ', data
return jsonify(dict(results=str(data*2)))
# Main
if __name__ == '__main__':
app.run(
host = '0.0.0.0',
port = int('8080'),
debug = True # TODO: Disable debug mode after testing is complete
)
在客户端,相关的代码片段是:
$('#dataSubmitBtn').button().click(submitAdditionalData);
function submitAdditionalData() {
var j = $.getJSON(
'http://127.0.0.1:8080',
{data: 15}, // Payload
function(returnedData) { // Success function
console.log('Data returned from server: ', returnedData.results);
}
).done(function() {
console.log('Successful execution');
}).fail(function() {
console.log('Error');
}).always(function() {
console.log('Complete');
});
return false;
}
当我运行这个Python类并打开我的网页时,失败和总是会执行的函数会被调用,但成功的函数却从来没有被执行过。不过,如果我在浏览器地址栏输入
http://127.0.0.1:8080/?data=30
我会得到
{
"results": "60"
}
这是我认为应该得到的结果。问题出在Javascript代码上吗?还是Python代码?也许两者都有问题?
1 个回答
1
正如@SLaks提到的,你试图从另一个域名获取数据,这在同源政策下是不允许的。不过,使用JSONP可以解决这个问题。
要使用JSONP,你需要在服务器端做一些修改。这里有一个关于在Flask中使用JSONP的例子。然后,在客户端,你需要一个callback
参数(这个参数是服务器端定义的)。如果你使用jQuery.getJSON
,可以查看这里的文档获取更多细节。