2013-06-25 63 views
1

感謝您花時間查看我的問題。Sammy.js沒有將JSONP請求呈現給Django應用程序

我在前端創建了一個與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); 

調用到螢火蟲我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示例並沒有幫助。

回答

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(注意周圍的功能引號)響應搬弄是非的標誌。