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')
}
})
}
});
不確定爲什麼你要回數據,但問題似乎是從GET訪問reid參數。你可以檢查以確保參數在那裏嗎?在JS中,確保該值非空。 –
它不爲空,否則它將無法返回任何數據bc它使用該參數執行API查找。 看來很奇怪,問題是在訪問參數,當它明確能夠訪問它,否則它將無法正常工作。 –
你可以在哪裏調用getJson來顯示代碼嗎? –