简单的jQuery帖子问题(使用Django)

时间:2011-03-06 20:21:37

标签: django jquery

唱django和jQuery

我正在尝试使用post方法实现一个按钮,该按钮将发送一个要从db中删除的字段的id。

feed_list.html

<form id="get_feed_frm">
{% csrf_token %}
{% for news in new_feed %}
<ul class = {{news.pk}}>

    <button id = {{news.pk}}>  Remove</button>
     <script>
        $("#{{news.pk}}").click(function () { 
                $('ul').remove('.{{news.pk}}');
                $.post('/?ajax', { csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(), id: '{{news.pk}}'});
                }) </script>
    {{ news.question }}
    <hr />
</ul>
{% endfor %}
</form>

我可以使用此代码获得所需的结果。但是,当我删除

$('ul').remove('.{{news.pk}}');

从我的脚本行,该功能不起作用,我无法解释为什么会这样。我非常感谢您对此的意见。

-r

修改

Thx Yuji我学到了一些技巧,可以帮助我更好地编写代码。但是我仍然有同样的问题。

我发布在我的观看代码下面,因为我必须做一些根本错误的观点或我发送帖子方法的方式

def recent_feed_view(request):

print "Entering View"
new_feed = []
if 'id' in request.POST:
    delete_id = request.POST['id'].strip()
    print "____id____" #just for debugging purpuse
    print delete_id
    n = news.objects.get(pk=delete_id)
    n.discarded = True
    n.save()

new_feed = news.objects.filter(discarded = False)

variables = RequestContext(request, {'new_feed': new_feed})

if 'ajax' in request.POST:
    print "______AJAX_______"

return render_to_response('feed_list.html', variables)  

EVerytime我运行网站,URL正确地将执行链接到正确的视图,我在命令提示符中收到以下消息:

[06/Mar/2011 16:59:38] "GET /?csrfmiddlewaretoken=e724dfb883965aaa0edfb6ef521a885c HTTP/1.1" 200 1017

修改

Yuji,(感谢我向Chrom开发工具介绍我!我还是个新手,非常感谢你!)

我听从你的建议 这里发生了两件事:

在Chrome开发工具中运行此代码:

$.ajax({
                type: 'POST',
                url: '/?ajax',
                data: {
                csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
                id:44
                    }
                });

开发服务器收到一条帖子:我的代码中丢弃了正确的条目,我不得不手动刷新页面以查看所做的更改

Entering View
____id____
44
[06/Mar/2011 18:20:27] "POST /?ajax HTTP/1.1" 200 1203

将以上脚本纳入我的网站,我会收到:

Entering View
 ____id____
45
[06/Mar/2011 18:29:18] "POST /?ajax HTTP/1.1" 200 968
Entering View
[06/Mar/2011 18:29:18] "GET /?csrfmiddlewaretoken=e724dfb883965aaa0edfb6ef521a885c HTTP/1.1" 200 968

出于某种原因,我正在接受POST和GET;我用过这个脚本:

    <script type="text/javascript">
    $(function() {
        $(".remove-button").click(function() {

            $.ajax({
                type: 'POST',
                url: '/?ajax',
                data: {
                csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
                id:$(this).attr('id')
                    }
                });
        })
    })
       </script>

2 个答案:

答案 0 :(得分:2)

由于我不明白为什么删除该行会阻止$.post行发生,我将开始建议fixing some syntax problems浏览器可能无法解析。

您需要引用您为类名和按钮ID输入的值。

这些线条为我的语法荧光笔造成了麻烦,所以谁知道......

<ul class = "{{news.pk}}">
    <button id = "{{news.pk}}">  Remove</button>

此部分只是一个建议,但不是每行嵌入一个<script>,而是应该为每个按钮添加一个类,这样你只需要定义一次jquery动作。

考虑一下:<button id = "{{news.pk}}" class="remove-button"> Remove</button>

<script type="text/javascript">
    $(function() {
        $(".remove-button").click(function() {
            $.post('/?ajax', { 
                csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
                id: $(this).attr('id')
                });
        })
    })
</script>

开发服务器认为这是一个GET请求 - 您可以尝试使用$.ajax函数手动吗?我想知道以前版本的jQuery是否与你的传入让你的POST更加困惑?

$.ajax({
  type: 'POST',
  url: '/?ajax',
  data: {
       csrfmiddlewaretoken: $(...),
       id: ...
  }
});

PS:这是一个谷歌Chrome开发工具或firebug非常方便的地方,你可以输入原始的jquery命令:)

答案 1 :(得分:0)

您可以配置jQuery以从Django设置的cookie中检索令牌,并设置要在每个jQuery.ajax和jQuery.post中使用的正确头。

(function($){
    if(!$) {
        return;
    }

    var match = document.cookie.match(/csrftoken=(\w+)/);
    var token = match ? match[1] : '';

    $.ajaxSetup({
        headers: { 'X-CSRFToken': token }
    });

})(window.jQuery);