Javascript getJSON issue using Django calback

18857 ワード

am trying to make a call with this script,but am getting a「Uncaugt SyntxError:Unxpected token:」
I can't figure out where I'm gong wrong、I don't know if it's something with my calback.I am sending a valid JSON packet so I don't think's the issue.Anyway、here's my/jcall
<script>
function loadJSON(){
    $
.getJSON("http://localhost:8000/api/0.1/tonight-mobile.json&callback=?",function(data){
            alert
('hey');
             $
('result').append(data);
             alert
('hey 2');
         $
.each(data,function(i, json){});

   
});
    alert
('hey 3');
}
</script>
With this coresonting function in myjango view:
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 inPlace.objects.all()]
   
)

    xml_bytes
= json.dumps(place_data)
   
returnHttpResponse(xml_bytes, content_type='application/json; charset=utf-8')
Here is my request being logged by my server(so I know its at least getting that far with a OK status code):
"GET /api/0.1/tonight-mobile.json&callback=jsonp1293142434434 HTTP/1.1"200167
Displaying this error in my javascript consolie:
UncaughtSyntaxError:Unexpected token : tonight-mobile.json&callback=jsonp1293142434434:1
If you need to see my JSON format(if that is what's causing this)please let me know and I can post it too.
Thank you in advance for your help!
UPDATE:
Here's the reponse comming from my server:
{"Places":[{"url":"http://localhost:8000/api/0.1/places/1.plist","image_url":"http://localhost:8000/static/place_logos/Tsonoqua_Mask.gif","name":"Boo's Place"}]}
[23/Dec/201017:37:22]"GET /api/0.1/tonight-mobile.json&callback=jsonp1293147441552 HTTP/1.1"200167
UPDATE 2:
I've managed to get my calback work corectly!Here's the code:
Client side:
<script>
function loadJSON(){
    $
.getJSON("http://localhost:8000/api/0.1/tonight-mobile.json&callback=?", logIt(data));
}
function logIt(data){
    window
.console && console.log(data);
    alert
('yay!');
}
</script>
Server side:
def tonight_mobile(request):
    callback
= request.GET.get('callback','logIt')

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

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

    xml_bytes
= json.dumps(place_data)

   
if callback:
        xml_bytes
='%s(%s)'%(callback, xml_bytes)
   
print xml_bytes

   
returnHttpResponse(xml_bytes, content_type='application/javascript; charset=utf-8')
This returns the follwing reponse:
logIt({"Places":[{"url":"http://localhost:8000/api/0.1/places/1.plist","image_url":"http://localhost:8000/static/place_logos/Tsonoqua_Mask.gif","name":"Boo's Place"}]})
Is this how it shound function?It seems I shound be able to simplify the get JSON call…I just want to make sure I've done everthing I need to corectly with my calback before I conting forward parsing the reponse and setting the m to element the.parte.
UPDATE 3*
So,I've made quite some progress!I'm using Jquery mobile,so ignore some of the follwing overdone css,its not related to the coree issue.
I'm having a problem looping over the「Places」in my JSON packet.I am getting a reponse with multile「Places」、but can't seem to figure out how to to iterate over them.My'i'variable ine myfich therectres
My getJSON and calback method have evolved into this:
<script>
function loadJSON(){
    $
.getJSON("http://localhost:8000/api/0.1/tonight-mobile.json&callback=?", callback(data));
}
function callback(data){
    $
("#tonight-list").each(data.Places,function(i){
        $
(this).append("<li role='option' tabindex='"+ data.Places[i]+"' class='ui-li-has-thumb ui-li ui-btn ui-btn-icon-right ui-corner-top ui-corner-bottom ui-controlgroup-last ui-btn-down-c ui-btn-up-c' data-theme='c'><div class='ui-btn-inner ui-corner-top ui-corner-bottom ui-controlgroup-last'><span class='ui-icon ui-icon-arrow-r'></span><div class='ui-btn-text'><img src="+ data.Places[i].image_url +" alt="+ data.Places[i].name +" class='ui-li-thumb ui-corner-tl ui-corner-bl'/><h1 class='list-title ui-li-heading' id='list-title'><a href='detail.html?id=slide' data-transition='slide' class='ui-link-inherit'>"+ data.Places[i].name +"</a></h1><span class='ui-li-count ui-btn-up-c ui-btn-corner-all'>"+ data.Places[i].events +" events</span></div></div></li>");
   
});

}
</script>
Here's myレスリング:
callback({"Places":[{"url":"http://localhost:8000/api/0.1/places/3.plist","image_url":"http://localhost:8000/static/place_logos/Bengals_1.png","name":"Big 12","events":2},{"url":"http://localhost:8000/api/0.1/places/2.plist","image_url":"http://localhost:8000/static/place_logos/Makonde_Mask.gif","name":"Harpo's","events":0},{"url":"http://localhost:8000/api/0.1/places/1.plist","image_url":"http://localhost:8000/static/place_logos/Quintons_1.png","name":"Quinton's","events":1}]})
Am I confusing how the each function iterates over the JSON(which become)Javascript object?I am pretty sure the each is my issue here,as I am only getting the FIRST element of the「Places」list.Can someone please help me out?