単純なjquery ajax呼び出しでjsonデータを取得しようとしています。ただし、呼び出しが失敗し、その理由がよくわかりません。
コードは以下です。私にはそれでいいように思えます。
$(document).ready(function() {
function onDataReceived (data){
alert('test');
};
$("button").click(function(){
$.ajax({
url: "/test",
type: "GET",
dataType: "jsonp",
success: onDataReceived
});
});
});
編集フラスコの使用
ここでの問題は、Flask を使用して json オブジェクトを返すことでした。ただし、純粋な json を返すと、jquery で ajax 呼び出しを実行しようとすると、ドメイン間の競合が発生します。したがって、フラスコ ビューから jsonp を出力すると、はるかに簡単になります。これを行うには、以下のスニペットを使用できます (ここから: http://flask.pocoo.org/snippets/79/ )。上記のものを参照できるjavascriptの部分については、dataTypeをjsonからjsonpに変更しただけです。
import json
from functools import wraps
from flask import redirect, request, current_app
def support_jsonp(f):
"""Wraps JSONified output for JSONP"""
@wraps(f)
def decorated_function(*args, **kwargs):
callback = request.args.get('callback', False)
if callback:
content = str(callback) + '(' + str(f().data) + ')'
return current_app.response_class(content, mimetype='application/json')
else:
return f(*args, **kwargs)
return decorated_function
# then in your view
@default.route('/test', methods=['GET'])
@support_jsonp
def test():
return jsonify({"foo":"bar"})
フラスコから直接jsonを使用する方法があるかどうかはわかりませんが、おそらくあるでしょう。ただ、jsonpの方が安全でもあるので、とにかくこれで行ったほうがいいと思います。