我正在使用django和jQuery,我尝试在提交后更改按钮视图而不重新加载页面。当我第一次按下它时一切正常,但第二次按下导致两个POST请求,第三个到三个等等,按钮不再改变。虽然按下每个按钮,数据库中的数据会发生变化。
请帮助我找出我的jquery代码有什么问题以及如何防止post请求乘法
function send()
{
$('.valid').submit(function()
{
var a_id = $(this).attr('a_id');
var vl = $(this).attr('vl');
$.ajax(
{
data: {'a_id' : a_id},
type: 'POST',
url: 'vl/',
success: function(data, status)
{
$('#mark_'+a_id).html('<i class="icon-white icon-ok"></i> Correct!')
$('#mark_'+a_id).attr("id",'cor_'+a_id);
$('#cor_'+a_id).html('Not correct')
$('#cor_'+a_id).attr("id",'mark_'+a_id);
},
error: function(xhr, data)
{
alert('fail: ' + data +' answer #'+ a_id);
}
});
});
}
a_id用于答案ID,它来自模板中的按钮
{% if answer.validity %}
<button id="cor_{{ answer.id }}" class="btn btn-inverse js-mark " a_id="{{answer.id}}" onclick = "send()" ><i class="icon-white icon-ok"></i> Correct answer</button>
{% else %}
<button id="mark_{{ answer.id }}" class="btn btn-inverse js-mark" a_id="{{answer.id}}" onclick = "send()" >Mark this answer as correct</button>
{% endif %}
views.py部分:
def question_vl(request, question_id):
context_instance=RequestContext(request)
question = get_object_or_404(Question, pk=question_id)
if request.user == question.author:
if request.method == 'POST':
if(request.POST.get('a_id')):
a = Answer.objects.get(pk=request.POST.get('a_id'))
if a.validity==False:
a.validity = True
else:
a.validity = False
a.save()
return HttpResponse("")
答案 0 :(得分:1)
这一行
$('.valid').submit(function()
将提交事件附加到表单。因此,无论何时按下按钮功能,“发送”都会再次附加相同的事件。
修改按钮:
{% if answer.validity %}
<button class="btn btn-inverse js-mark" a_id="{{answer.id}}" onclick = "send(this)" ><i class="icon-white icon-ok"></i> Correct answer</button>
{% else %}
<button class="btn btn-inverse js-mark" a_id="{{answer.id}}" onclick = "send(this)" >Mark this answer as correct</button>
{% endif %}
以这种方式修改你的功能:
function send(button)
{
button = $(button);
var a_id = button.attr('a_id');
$.ajax(
{
data: {'a_id' : a_id},
type: 'POST',
url: 'vl/',
success: function(data, status)
{
if (data.validity){
button.html('<i class="icon-white icon-ok"></i> Correct!')
} else {
button.html('Not correct!')
}
},
error: function(xhr, data)
{
alert('fail: ' + data +' answer #'+ a_id);
}
});
}
您的服务器端脚本应返回实际值为“validity”的JSON数据