5

Chèn vào mysql bằng cách sử dụng php tệp được gọi qua số AJAX. Trước khi insert mã php tuyên bố thực hiện select truy vấn tìm bản ghi trùng lặp và tiếp tục đến insert statement.gửi biểu mẫu hai lần qua ajax POST

Vấn đề: Khi gọi tệp php từ ajax. nó thực hiện hai lần và nhận được phản hồi như bản ghi trùng lặp.

tôi cũng đã thử error_log từ chức năng chèn được gọi là hai lần.

điểm kích hoạt của hình thức xác nhận

$("#load-modal").on("click","#addcountryformsubmitbtn",function(e){ 
    e.preventDefault(); 
    var $form = $("#addcountryform"), $url = $form.attr('action'); 
    $form.submit(); 
}); 

Đây là cách thức nộp sau khi xác nhận:

}).on('success.form.bv', function(e){ 
    e.preventDefault(); 
    var $form = $("#addcountryform"), $url = $form.attr('action'); 
    $.post($url,$form.serialize()).done(function(dte){ $("#load-modal").html(dte); }); 
}); 

sử dụng bootstrapvalidator, Core PHP, mysqli, Chrome Browser.

JS Thực tế:

  $(document).ready(function() { 
      $php_self_country="<?php echo $_SERVER['PHP_SELF']."?pg=countrycontent"; ?>"; 
      $("#country-content").load($php_self_country,loadfunctions); 
      $("#country-content").on("click", ".pagination a", function (e){ 
       e.preventDefault(); 
       $("#country-loading-div").show(); 
       var page = $(this).attr("data-page"); 
       $("#country-content").load($php_self_country,{"page":page}, function(){ 
        $("#country-loading-div").hide(); 
        loadfunctions(); 
       });    
      }); 
      $("#country-content").on("click","#closebtn",function(e){ 
       e.preventDefault(); 
       $("#country-content").load($php_self_country,loadfunctions); 
      }); 
     }); 
     function loadfunctions(){ 
      $("[data-toggle='tooltip']").tooltip(); 
      $("#country-content").on("click","#addcountrybtn, #addcountrylargebtn",function(e){ 
       e.preventDefault(); 
       $.ajax({ 
        url: $php_self_country, 
        type: "POST", 
        data: { 'addcountry':'Y' }, 
        dataType: "html", 
        cache: false 
       }).done(function(msg){ 
        $("#load-modal").html(msg); 
        $("#load-modal").modal('show'); 
        $('input[type="radio"]').iCheck({ checkboxClass: 'icheckbox_minimal', radioClass: 'iradio_minimal' }); 
        modalvalidation(); 
       }).fail(function() { 
        $("#load-modal").html("Request Failed. Please Try Again Later."); 
       });   
      }); 
      $("#country-content").on("click",".tools a",function(e){ 
       e.preventDefault(); 
       var recordid = $(this).attr("record-id"); 
       $.ajax({ 
        url: $php_self_country, 
        type: "POST", 
        data: { 'modifycountry':recordid }, 
        dataType: "html", 
        cache: false 
       }).done(function(msg){ 
        $("#load-modal").html(msg); 
        $("#load-modal").modal('show'); 
        $('input[type="radio"]').iCheck({ checkboxClass: 'icheckbox_minimal', radioClass: 'iradio_minimal' }); 
        modalvalidation(); 
       }).fail(function() { 
        $("#load-modal").html("Request Failed. Please Try Again Later."); 
       }); 
      }); 
      $("#load-modal").on("click","#addcountryformsubmitbtn",function(e){ 
       e.preventDefault(); 
       var $form = $("#addcountryform"), $url = $form.attr('action'); 
       $form.submit(); 
      }); 
      $("#load-modal").on("hide.bs.modal", function() { 
       window.location.href=$php_self_country_pg; 
      }); 
     } 
     function modalvalidation(){ 
      $('#addcountryform').bootstrapValidator({ 
       message: 'This value is not valid', 
       feedbackIcons: { 
        valid: 'glyphicon glyphicon-ok', 
        invalid: 'glyphicon glyphicon-remove', 
        validating: 'glyphicon glyphicon-refresh' 
       }, 
       fields: { 
        [-------Validation part comes here----------] 
       } 
      }).on('success.form.bv', function(e){ 
       e.preventDefault(); 
       var $form = $("#addcountryform"), $url = $form.attr('action'); 
       $.post($url,$form.serialize()).done(function(dte){ $("#load-modal").html(dte); }); 
      }); 
     } 

HTML

html này được gọi là nút bấm addcountrybtn qua AJAX và viết để div load-modal đó là trong tập tin cơ sở html.

<div class="modal-dialog"> 
<div class="modal-content"> 
    <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> 
     <h4 class="modal-title"><i class="fa fa-exchange"></i> <?php echo COUNTRYLABEL; ?></h4> 
    </div>  
    <div class="modal-body"> 
     <form role="form" method="POST" action="self.php" name="addcountryform" id="addcountryform" class="form-horizontal"> 
      <div class="form-group"> 
       <div class="col-xs-3"> 
       <label for="countryname" class="pull-right">Country Name</label> 
       </div> 
       <div class="col-xs-9"> 
       <div class="lnbrd"> 
       <input type="text" class="form-control" name="countryname" placeholder="Enter Country Name"> 
       </div> 
       </div> 
      </div> 
      <div class="form-group"> 
       <div class="col-xs-3"> 
       <label for="crncyname" class="pull-right">Currency Name</label> 
       </div> 
       <div class="col-xs-9"> 
       <div class="lnbrd"> 
       <input type="text" class="form-control" name="crncyname" placeholder="Enter Currency Name"> 
       </div> 
       </div> 
      </div> 
      <div class="form-group"> 
       <div class="col-xs-3"> 
       <label for="crncycode" class="pull-right">Currency Code</label> 
       </div> 
       <div class="col-xs-9"> 
       <div class="lnbrd"> 
       <input type="text" class="form-control" name="crncycode" placeholder="Enter Currency Code"> 
       </div> 
       </div> 
      </div> 
      <div class="form-group"> 
       <div class="col-xs-3"> 
       <label for="forrate" class="pull-right">Foreign Currency Rate<?php echo isset($icon)?$icon:''; ?></label> 
       </div> 
       <div class="col-xs-9"> 
       <div class="lnbrd"> 
       <input type="text" class="form-control" name="forrate" placeholder="Enter Foreign Currency Rate."> 
       </div> 
       </div> 
      </div> 
      <div class="form-group"> 
       <div class="col-xs-3"> 
       <label for="taxpercent" class="pull-right">Tax &#37;</label> 
       </div> 
       <div class="col-xs-9"> 
       <div class="lnbrd"> 
       <input type="text" class="form-control" name="taxpercent" placeholder="Enter Tax Percentage"> 
       </div> 
       </div> 
      </div> 
     </form>   
    </div> 
    <div class="modal-footer clearfix"> 
     <button type="button" class="btn btn-danger pull-right" id="addcountryformsubmitbtn">Add</button> 
    </div> 
</div> 

Lưu ý: - trong Cơ sở dữ liệu quan điểm của mã số hoạt động như mong đợi.

+0

Bạn có thể hiển thị HTML của '# addcountryformsubmitbtn' không? Vui lòng kiểm tra xem nó có thuộc tính 'type =" button "' hay không. – sp00m

+0

@ sp00m tìm HTML được đề cập. _tried both_ 'type =" button "' và 'type =" submit "' đầu ra vẫn giống nhau. –

Trả lời

0

Vài điều tôi đã thấy có thể là nguyên nhân.

Nếu bạn đang sử dụng IE, tôi đã thấy rằng thực hiện GET ngay trước khi thực hiện POST (với cùng một URL, với cùng một dữ liệu được gửi qua), vì vậy bạn có thể thử kiểm tra trên máy chủ của mình (và bỏ qua GET)

Có thể thêm một số thứ khác vào cuối các sự kiện bấm nút của bạn sau cuộc gọi AJAX (thực tế, thông thường tôi sẽ đặt dòng đầu tiên ở phía trên cùng với ngăn chặn mặc định, và tuyên bố trở lại rõ ràng là rất cuối cùng) ...

e.stopImmediatePropagation(); 
return false; 
+0

hoạt động của nó !!! chỉ cần thêm 'e.stopImmediatePropagation();' bên cạnh tất cả 'e.preventDefault();' và không sử dụng 'return false;'; nó sẽ gây ra vấn đề trong tương lai ?? thử nghiệm trong IE10 và Chrome :) –

Các vấn đề liên quan