1

単純な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の方が安全でもあるので、とにかくこれで行ったほうがいいと思います。

4

1 に答える 1