2013-07-23 62 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類。

相關問題