感谢您抽出宝贵时间来查看我的问题。
我正在构建一个混合应用程序,前端是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')
我的Sammy路线:
(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示例都没有帮助。
答案 0 :(得分: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(注意函数周围的引号)。