使用jQuery .post方法将数据发送到Django服务器但得到错误500?

时间:2013-01-18 18:14:08

标签: jquery python django

我是Django的新手,我正在制作一款拥有10x10主板的游戏,如果点击它,它将被标记为“X”。在我的一个模型上,我有一个存储每个单元格单元格值的属性,默认情况下它们设置为空白。我能用jquery标记板子。但是,我想将数据发送到服务器端,让它知道我点击的单元格已被标记。这样,当我退出游戏并稍后重新访问时,电路板将显示带有“X”的标记单元格。

这是我的HTML页面中嵌入的jquery代码:

<script>
$(document).ready(function(){ 
    $('.target_cell').click(function(){ 
        if ($(this).text() != "X" && $(this).text() != "H"){
            $(this).text("X");
            var spot = $(this).attr('name'); //Cell index number like in an array
            $.post("/play_game/{{game.id}}/", spot);
        }
        else{
            alert("Spot already taken!");
        }
    });
});
</script>

以下是我的jquery .post方法访问的视图代码:

def play_game(request, game_id):
    game = fetch_game(request.user, game_id)
    if request.method == 'POST':
        spot = request.POST['spot']
        game.creator_target_board[int(spot)] = "X"
    variables = RequestContext(request, {
        'game': game,
        'set_board': game.creator_ship_board,
        'target_board': game.creator_target_board
    })
    return render_to_response('battleship/play_game.html', variables)

我目前正在我的视图上使用csrf_exempt进行测试。当我单击我的单元格单元格时,它会标记为“X”,但我的服务器日志显示500错误。有想法该怎么解决这个吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

你的urls.py看起来像什么?

我建议您通过执行以下操作来使用ajax而不是post:

在urls.py中

添加:

url(r'^target_spot/(?P<game_id>\d+)/(?P<spot>\d+)/$', target_spot, name='target_spot'),
在您的javascript通话中

$.ajax("/target_spot/{{game.id}}/" + spot);

在你的观点中添加:

def target_spot(request, game_id, spot):
    if request.is_ajax():
        game = fetch_game(request.user, game_id)
        game.creator_target_board[int(spot)] = "X"

这种方法的优点在于,您可以分离逻辑,使代码更清晰,更快,因为服务器不会在每个发布请求时都提供页面