2010-12-20 5 views
0

Also versuche ich einen einfachen Aufruf mit jQuery. GetJSON zu meinem lokalen Web-Server mit Python/Django, um seine Anfragen zu bedienen. Die Adresse verwendet wird, ist:jQuery getJSON Ausgabe mit Python/Django

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

Ich versuche, eine einfache Web-Ansicht zu schreiben, die diese URL zugreifen können und ein JSON-Paket als das Ergebnis (Sorgen um tatsächliche Elementwerte/Layout später) zurück.

Hier ist mein einfacher Versuch nur Alarmierung/Rücksendung die Daten:

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

ich in der Lage bin diese URL direkt zugreifen zu können, entweder auf http://localhost:8000/api/0.1/tonight-mobile.json oder http://localhost:8000/api/0.1/tonight-mobile.json&callback=jsonp1290277462296 und ein gültiges JSON-Paket zurück ... So ich nehme an, es in meinem Noob Script :)

Meine views.py Funktion, die diese Reaktion erzeugt sieht wie folgt aus:

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") 

Mit entsprechender urls.py Konfiguration:

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

Ich bin immer noch ein wenig verwirrt darüber, wie Rückrufe zu verwenden, so vielleicht das ist, wo mein Problem liegt. Hinweis Ich kann direkt eine 'blah.json'-Datei aufrufen, die mir eine Antwort gibt, aber nicht über eine verkabelte URL. Könnte mir jemand eine Richtung geben?

Antwort

0

Erstens, callback = request.GET.get('callback=?', '') erhalten Sie nicht den Wert callback.

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

Funktioniert viel besser.

Debuggen Sie diese Art von Sache. Sie können print Anweisungen in Ihre Django-View-Funktion einfügen, damit Sie sehen können, was passiert. Zum Beispiel: print repr(request.GET) ist eine hilfreiche Sache, um eine Ansicht-Funktion zu setzen, so dass Sie das GET-Wörterbuch sehen können.

+0

S.Lott, danke für die Antwort. Aber Ihre Antwort scheint mir kein Ergebnis zu geben - nur ein Fehler in meiner Sicht, der besagt: 'QueryDict' Objekt ist nicht aufrufbar. – user546459

+2

@ user546459: Ich habe eine Änderung vorgenommen. Du kannst "debuggen", weißt du. Sie versuchen verschiedene Dinge. Fügen Sie 'print' Anweisungen hinzu. Experiment. Es ist erlaubt, weißt du. –