首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

jquery ajax常常发生重复提交表单的现象

2012-12-29 
jquery ajax经常发生重复提交表单的现象?代码如下:$(.new).click(function(){$(#EditForm).on(show,

jquery ajax经常发生重复提交表单的现象?
代码如下:


$(".new").click(function(){
  $("#EditForm").on('show', function(){
    document.getElementById('id_date').value = "";
    document.getElementById('id_content').value = "";
    $(".save").click(function(){
      var date_data = document.getElementById('id_date').value;
      var content_data = document.getElementById('id_content').value;
      var post_data = {'date':date_data, 'content':content_data, 'flag':'new'};
      $.ajax({
        type:'POST',
        url:'{% url diary_views_mydiary uid month %}',
        data:post_data,
        dataType:'json',
        async:false,
        success:function(ret){alert(ret);}
      });
    });
    $(".cancel").click(function(){
      $("#EditForm").modal('hide');
    });
  });
});



views.py:

def MyDiary(request, uid, month):
    if request.is_ajax():
        flag = request.POST.get('flag')
        """New"""
        if flag == 'new':
            new_date = request.POST.get('date')
            new_content = request.POST.get('content')
            new_diary = Diary(user_id=uid, date=new_date, content=new_content)
            try:
                new_diary.save()
                ret = "1"
                return HttpResponse(ret)
            except:
                ret = "0"
                return HttpResponse(ret)



<div class="modal hide fade" id="EditForm">
  <div class="modal-header">
    <a class="close" data-dismiss="modal">×</a>
    <h3>新建</h3>
  </div>
  <div class="modal-body">
    <form action="" method="POST">
      <fieldset>
        {% csrf_token %}
        <div class="control-group">
          <label class="control-label" for="id_date">日期</label>


          <div alt="jquery ajax常常发生重复提交表单的现象" />
我试过在回调函数里强制刷新页面,不过也没用,照样会有重复的。
请问需要怎么做?
[解决办法]
你的事件绑定有问题吧,点击new多少次,就给 $(".save")绑定了多少次click事件,也就相当于执行了多少次click事件,导致发送了多少次ajax了。。

要取消原来绑定的click事件再绑定,要么就在$(function(){/*执行绑定*/});执行事件绑定只绑定一次

$(".new").click(function(){
  $("#EditForm").on('show', function(){
    document.getElementById('id_date').value = "";
    document.getElementById('id_content').value = "";
    $(".save").unbind('click').click(function(){
      var date_data = document.getElementById('id_date').value;
      var content_data = document.getElementById('id_content').value;
      var post_data = {'date':date_data, 'content':content_data, 'flag':'new'};
      $.ajax({
        type:'POST',
        url:'{% url diary_views_mydiary uid month %}',
        data:post_data,
        dataType:'json',
        async:false,
        success:function(ret){alert(ret);}
      });
    });
    $(".cancel").unbind('click').click(function(){
      $("#EditForm").modal('hide');
    });
  });
});
[解决办法]


$(".save").click(function(){
      var date_data = document.getElementById('id_date').value;
      var content_data = document.getElementById('id_content').value;
      var post_data = {'date':date_data, 'content':content_data, 'flag':'new'};
      $.ajax({
        type:'POST',
        url:'{% url diary_views_mydiary uid month %}',


        data:post_data,
        dataType:'json',
        async:false,
        success:function(ret){alert(ret);}
      });
    });
    $(".cancel").click(function(){
      $("#EditForm").modal('hide');
    });



这一段可以拖到外面写吧,不用在点击$(".new")的时候绑定事件了,
{% url diary_views_mydiary uid month %}这个当成方法参数传进去好了。。

热点排行