Вывод jQuery getJSON с использованием Python / Django - PullRequest
0 голосов
/ 20 декабря 2010

Итак, я пытаюсь сделать простой вызов, используя jQuery .getJSON, на свой локальный веб-сервер, используя python / django для обслуживания своих запросов. Используемый адрес:

http://localhost:8000/api/0.1/tonight-mobile.json?callback=jsonp1290277462296

Я пытаюсь написать простое веб-представление, которое может получить доступ к этому URL-адресу и вернуть в результате JSON-пакет (беспокоюсь о фактических значениях элементов / макете позже).

Вот моя простая попытка просто предупредить / вернуть данные:

$.getJSON("http://localhost:8000/api/0.1/tonight-mobile.json&callback=?",
function(json){
    alert(json);
    <!--$.each(json.items, function(i,item){
    });-->
});

Я могу получить доступ к этому URL-адресу напрямую: http://localhost:8000/api/0.1/tonight-mobile.json или http://localhost:8000/api/0.1/tonight-mobile.json&callback=jsonp1290277462296 и получить действительный пакет JSON ... Так что я предполагаю, мой нубский JavaScript:)

Моя функция views.py, которая генерирует этот ответ, выглядит следующим образом:

def tonight_mobile(request):
    callback = request.GET.get('callback=?', '')    

    def with_rank(rank, place):
        return (rank > 0)

    place_data = dict(
        Places = [make_mobile_place_dict(request, p) for p in Place.objects.all()]
    )

    xml_bytes = json.dumps(place_data)
    xml_bytes = callback + '(' + xml_bytes + ');'

    return HttpResponse(xml_bytes, mimetype="application/json")

С соответствующей конфигурацией urls.py:

(r'^tonight-mobile.json','iphone_api.views.tonight_mobile'),

Я все еще не совсем понимаю, как использовать обратные вызовы, так что, возможно, именно в этом моя проблема. Примечание. Я могу напрямую вызывать файл «blah.json», который дает мне ответ, но не через проводной URL. Может ли кто-нибудь помочь мне в каком-то направлении?

1 Ответ

0 голосов
/ 20 декабря 2010

Во-первых, callback = request.GET.get('callback=?', '') не даст вам значение callback.

callback = request.GET.get( 'callback', None ) 

Работает намного лучше.

Для отладки такого рода вещей. Возможно, вы захотите включить операторы print в функцию просмотра Django, чтобы вы могли видеть, что происходит. Например: print repr(request.GET) - это полезная вещь для добавления в функцию представления, чтобы вы могли видеть словарь GET.

...