【发布时间】:2011-08-21 22:36:41
【问题描述】:
我正在编写 jQuery 教程 (Link),但一直停留在“评价我:使用 AJAX”部分
jQuery:
$(document).ready(function() {
// generate markup
$("#rating").append("Please rate: ");
for ( var i = 1; i <= 5; i++ )
$("#rating").append("<a href='#'>" + i + "</a> ");
// add markup to container and apply click handlers to anchors
$("#rating a").click(function(e){
// stop normal link click
e.preventDefault();
// send request
$.post("/vote", {rating: $(this).html()}, function(xml) {
// format and output result
$("#rating div").html(
"Thanks for rating, current average: " +
$("average", xml).text() +
", number of votes: " +
$("count", xml).text()
);
});
});
});
urls.py:
urlpatterns = patterns('',
(r'^rating/$', 'ajax_rating.views.rating'),
(r'^vote/$', 'ajax_rating.views.vote'),
)
views.py:
@csrf_exempt
def vote(request):
if request.is_ajax():
rating = request['rating']
f = open('ratings.dat', 'w')
votes = json.load(f)
votes.append(rating)
f.close()
dict = {}
total_rating = sum(votes)
dict['count'] = len(votes)
dict['avg'] = total_rating / dict['count']
return HttpResponse(serializers.serialize('xml', dict), 'application/xml')
else:
return HttpResponse(status=400)
基本上,html 让用户可以在 1 到 5 之间进行选择(锚点为 class=rating)。单击选项后,#rating div 将使用从服务器返回的计算结果进行刷新。
问题:当我点击一个选项时,我收到“HTTP 500 Internal Server Error”。甚至在请求到达视图函数 vote(request) 之前,错误就会发生。我试图找出错误的原因,但没有任何线索。我认为这与 csrf 没有任何关系,因为我在视图函数上使用 @csrf_exempt 并从 MIDDLEWARE_CLASSES 中取出了 'django.middleware.csrf.CsrfViewMiddleware'。
请帮忙~~谢谢各位专家
【问题讨论】:
-
你能打开调试模式看看500是什么吗?
-
调试模式已经开启。但是,不知何故,页面保持不变。
-
如果您在 FF 中使用 firebug 或在 Chrome 中使用开发人员工具,您通常可以检查 500 响应以了解其内容。尝试在控制台中单击它。
-
我试图在 Chrome 中执行此操作,但不确定它是否能够让我查看 500 响应的详细信息。既然你已经为我确认了这一点。我会弄清楚如何在 Chrome 中做到这一点。谢谢。
-
打开控制台选项卡后,只需单击生成 500 响应的请求的 url。