2013-07-23 61 views
0

我有一个getJSON()调用来访问返回一些数据的视图。该调用工作和数据检索,但尽管如此,我仍然收到500错误。getJSON调用成功,但仍然抛出500错误

Failed to load resource: the server responded with a status of 500 (INTERNAL SERVER ERROR) 

MultiValueDictKeyError at /album_ajax/ 
"Key u'reid' not found in <QueryDict: {}>" 

Request Method: GET 
Request URL: http://127.0.0.1:8000/album_ajax/ 
Django Version: 1.4.3 
Python Executable: /usr/bin/python 
Python Version: 2.7.1 
Python Path: ['/Users/Santi/programming/feastfm', '/Library/Python/2.7/site-packages/pip-1.2.1-py2.7.egg', '/Library/Python/2.7/site-packages/South-0.7.6-py2.7.egg', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', '/Library/Python/2.7/site-packages'] 

我已经看了所以,并试图询问IRC,但一直没能弄清楚为什么我得到这个错误。查看/调用的语法是直接从复制:http://lethain.com/two-faced-django-part-5-jquery-ajax/

views.py

def get_album_tracks(request): 
    get = request.GET.copy() 
    reid = get["reid"] 
    url = "http://www.musicbrainz.org/ws/2/release/"+reid+"?fmt=json&inc=artist-credits+recordings" 
    data = urllib2.urlopen(url) 
    api_results = json.load(data) 
    tracks = [] 
    for entry in api_results['media']: 
     for track in entry['tracks']: 
      artist = track['artist-credit'][0]['name'] 
      title = track['title'] 
      tracks.append({'artist':artist, 'title':title}) 
    # results = {'reid':reid, 'tracks':tracks} 
    results = {'test':"is this working?", "reid":reid, 'tracks':tracks} 
    return_json = simplejson.dumps(results) 
    return HttpResponse(return_json, mimetype='application/json') 

中的getJSON()调用

$.getJSON("/album_ajax/", {"reid": reid}, function(json){ 
     if(json['tracks']){ 
      //alert("json?: " + json["tracks"]+" reid: "+json['reid']); 
      // var album = $('data-reid ='+) 
      for(var i=0; i<json['tracks'].length; i++){ 
       //console.log(json['tracks'][i]['title']) 
       var artist = json['tracks'][i]['artist'] 
       var title = json['tracks'][i]['title'] 
       $(ul).append("<li class = 'album-track track' data-artist = '"+escape(artist) +"' data-title ='" + escape(title) +"'>"+artist +" - "+ title+"</li>"); 
      } 

     } 
     else{ 
      alert('no results') 
     } 
     }) 

我不明白为什么我收到一个都500错误并且运行成功功能。

编辑

我把打印语句我的观点里,并将其与一个空的QueryDict看起来像取景功能被称为两次,一次和一次与包含里德变量的QueryDict:

album_tracks was just called 
<QueryDict: {}> 
album_tracks was just called 
<QueryDict: {u'reid': [u'0447570d-4804-49f1-9396-d71ddd8f59c4']}> 

我仍然不确定代码中的哪个位置会进行两次调用。

编辑2

包括其具有的getJSON整个函数()调用

$('.album').click(function(e){ 
    var $target = $(e.target); 
    // if(!$target.is("ul")) 
    if(!$target.is("div")) //magic happens here!! 
     { 
      return; 
     } 
    if($(this).children("li").length >= 1){ 
     $(this).children("li").toggle(); 
    } 
    else{ 
     var reid = $(this).data('reid'); 
     ul = this; 
     var data = {"reid": reid}; 
     // var args = { type:"GET", url:"/album/", data:data, complete:done }; 
     // $.ajax(args); 
     $.getJSON("/album_ajax/", data, function(json){ 
     if(json['tracks']){ 
      //alert("json?: " + json["tracks"]+" reid: "+json['reid']); 
      // var album = $('data-reid ='+) 
      for(var i=0; i<json['tracks'].length; i++){ 
       //console.log(json['tracks'][i]['title']) 
       var artist = json['tracks'][i]['artist'] 
       var title = json['tracks'][i]['title'] 
       $(ul).append("<li class = 'album-track track' data-artist = '"+escape(artist) +"' data-title ='" + escape(title) +"'>"+artist +" - "+ title+"</li>"); 
      } 

     } 


     else{ 
      alert('no results') 
     } 
     }) 
    } 
}); 
+0

不确定为什么你要回数据,但问题似乎是从GET访问reid参数。你可以检查以确保参数在那里吗?在JS中,确保该值非空。 –

+0

它不为空,否则它将无法返回任何数据bc它使用该参数执行API查找。 看来很奇怪,问题是在访问参数,当它明确能够访问它,否则它将无法正常工作。 –

+0

你可以在哪里调用getJson来显示代码吗? –

回答

0

原来,我曾与类中的多个元件,其中一个具有数据属性需要使ajax呼叫工作,另一个没有。他们都在射击,一个失败,另一个成功。

感谢@ jesse-vogt告诉我在html代码中查找.album类。

相关问题