2013-06-25 2 views
1

Спасибо, что нашли время, чтобы посмотреть на мой вопрос.Sammy.js не оказывает JSONP-запрос на приложение Django

Я создаю гибридное приложение с Sammy.js на front-end и Django на задней панели. Мой сайт - это всего лишь один index.html, размещенный на S3 через CloudFront, и нет, это не домашнее задание :)

Я бы хотел отобразить список категорий для маршрута «#/projects» с категориями, запрос JSONP для моего бэкэнда 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 в Firebug является:

"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 (обратите внимание на кавычки функции).