1

私の質問を見てくれてありがとう。

フロントエンドに Sammy.js、背面に Django を使用してハイブリッド アプリを構築しています。私のサイトは、CloudFront を介して S3 でホストされている単一の index.html にすぎません。いいえ、それは宿題ではありません :)

別のドメインで実行されている django バックエンドへの JSONP リクエストからのカテゴリを使用して、ルート「#/projects」のカテゴリのリストをレンダリングしたいと思います。

私のDjangoビュー:

def get_categories(request):
    jsoncallback = request.GET.get('jsoncallback')
    data = {'categories': [{'name': c.name, 'slug': c.slug} for c in categories]}
    jsonp = '{0}({1});'.format(jsoncallback, data)
    response = json.dumps(jsonp, ensure_ascii=False)
    return HttpResponse(response, content_type='application/json')

私のサミールート:

(function($) {
    var app = $.sammy('#app', function() {

    // (default route here)

    this.get('#/projects', function(context) {
        // localhost via manage.py runserver
        $.getJSON('http://localhost:8000/projects/categories/?jsoncallback=?',
            null, function(categories) {
                $.each(categories, function(i, category) {
                    console.log('here');
                    // code to render template here
                });
        });
    });

    $(function() {
        app.run('#/');
    });
})(jQuery);

Firebug での Django ビューへの呼び出しの応答部分は次のとおりです。

"jQuery183018328394494212097_1372132674985({'categories':
    [{'name': u'Open Source', 'slug': u'open-source'},
     {'name': u'Web Development', 'slug': u'web-development'},
     {'name': u'Print', 'slug': u'print'}]});"

しかし、私のconsole.log声明には決して到達しません。何が間違っているのかわかりません。誰かが私を正しい方向に向けることができますか? 残念ながら、Web 上の多くの JSONP の例をいじくり回して従うのに数時間かかりますが、役に立ちません。

4

1 に答える 1

1

これは簡単な問題であることがわかりました。私は単に を誤用してjson.dumps()いました。これは私の応答を形成する正しい方法でした:

def get_categories(request):
    jsoncallback = request.GET.get('jsoncallback')
    data = {'categories': [{'name': c.name, 'slug': c.slug} for c in categories]}
    json_data = json.dumps(data, ensure_ascii=False)
    response = '{0}({1});'.format(jsoncallback, json_data)
    return HttpResponse(response, content_type='application/json')

私が以前に得た応答の明らかな兆候は、JSON ではなく文字列であるということでした (関数が引用符で囲まれていることに注意してください)。

于 2013-06-25T13:51:58.293 に答える