【问题标题】:Sammy.js not rendering JSONP request to Django appSammy.js 没有向 Django 应用程序呈现 JSONP 请求
【发布时间】:2013-06-25 04:13:39
【问题描述】:

感谢您花时间查看我的问题。

我正在构建一个混合应用程序,前端是 Sammy.js,后端是 Django。我的网站只是通过 CloudFront 在 S3 上托管的单个 index.html,不,这不是家庭作业 :)

我想为路由“#/projects”呈现一个类别列表,这些类别来自一个 JSONP 请求到我的 django 后端,在不同的域上运行。

我的 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 声明永远不会到达。我不确定我做错了什么。有人可以指出我正确的方向吗?不幸的是,几个小时的修补和关注网络上的许多 JSONP 示例并没有帮助。

【问题讨论】:

    标签: jquery django jsonp sammy.js


    【解决方案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(注意函数周围的引号)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 2011-05-14
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      • 2017-04-17
      相关资源
      最近更新 更多