唱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>
答案 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);