2016-12-14 4 views
0

У меня есть функция, в которой пользователь может опубликовать отчет, пользователь нажимает кнопку отчета, а затем быстро вводит информацию для отчета. Это работает, проблема в том, что страница не перезагрузилась, и пользователь решил сообщить второй пост, данные для этого отчета поступают в базу данных дважды. Почему это?AJAX дважды вводит данные в базу данных

Вот код:

$(document).ready(function() { 
    $(".report_post").click(function(e) { 
    var nid = $(this).attr("id"); 
    $("#report_reason").dialog({ 
     resizable: false, 
     height: 300, 
     width: 400, 
     modal: true, 
    }); 

    $('.submit_report_post').click(function() { 
     var content = $("#report_content").val(); 
     var type = "Post"; 
     if ($('input[name="report"]:checked').length > 0 && (content != null && 
     content != "")) { 
     var complaint = document.querySelector('input[name="report"]:checked').value; 
     alert('Reported!'); 
     $.ajax({ 
      type: 'POST', 
      url: 'php/report_post.php', 
      data: { 
      type: type, 
      nid: nid, 
      reason: complaint, 
      content: content, 
      }, 
      cache: false, 
      success: function(data) { 
      $("#report_content").val(""); 
      $("input[name='report']").prop('checked', false); 
      //$("#report_reason").dialog('close'); 
      } 
     }); 
     } else { 
     alert('Fill all of the information!'); 
     } 
    }); 
    e.preventDefault(); 
    }); 
}); 
+0

Несколько вещей, которые вы можете сделать. Создайте массив с идентификатором кнопки. Когда кнопка нажата, вставьте идентификатор в массив. И перед отправкой запроса ajax, проверьте, является ли значение уже внутри массива. Надеюсь, это ясно enougth –

ответ

0

Вы связывание click на $('.submit_report_post') каждый раз, когда вы нажимаете на $(".report_post"), что вам нужно сделать это за пределами первых затруднительного

$(document).ready(function() { 
    $(".report_post").click(function(e) { 
    var nid = $(this).attr("id"); 
    $("#report_reason").dialog({ 
     resizable: false, 
     height: 300, 
     width: 400, 
     modal: true, 
    }); 
    e.preventDefault(); 
    }); 

    $('.submit_report_post').click(function() { 
    var content = $("#report_content").val(); 
    var type = "Post"; 
    if ($('input[name="report"]:checked').length > 0 && (content != null && 
     content != "")) { 
     var complaint = document.querySelector('input[name="report"]:checked').value; 
     alert('Reported!'); 
     $.ajax({ 
     type: 'POST', 
     url: 'php/report_post.php', 
     data: { 
      type: type, 
      nid: nid, 
      reason: complaint, 
      content: content, 
     }, 
     cache: false, 
     success: function(data) { 
      $("#report_content").val(""); 
      $("input[name='report']").prop('checked', false); 
      //$("#report_reason").dialog('close'); 
     } 
     }); 
    } else { 
     alert('Fill all of the information!'); 
    } 
    }); 

}); 
+0

Кажется, это решение, мне просто интересно, как передать «var nid = $ (this) .attr (« id »); 'к сценарию ajax? Я попытался создать отдельный 'var nid' внутри' submit_report_post', и он сработал. – prifs

+0

Nevermind, понял, как передать «var nid». Спасибо за это решение :) – prifs

2

Вы отправляете свою форму дважды, как только обычный путь и один раз через AJAX. У вас есть e.preventDefault(); в коде, который обычно останавливает типичную подачу не AJAX, однако вы никогда не создавали аргумент e.

Изменение:

$('.submit_report_post').click(function() { 

в

$('.submit_report_post').click(function(e) { 

и это сделает форма представить только через код AJAX.

Смежные вопросы