jQuery AJAX 폼이 두 번 제출됨
jQuery를 통해 캡처하고 AJAX를 통해 전송하는 폼이 있습니다.문제는 페이지를 새로 고칠 때마다 양식이 여러 번 제출된다는 것입니다.
제출 버튼의 바인드를 해제하려고 했는데, 첫 번째 제출 후에 정상적으로 양식이 게시됩니다.어떤 도움이라도 주시면 감사하겠습니다.
$('#exportForm').submit(function() {
$.ajax({
type: "POST",
url: $(this).attr('action'),
data: $(this).serialize(),
success: function(response) {
$('#exportForm').unbind('submit');
console.log(response);
}
});
return false;
});
전화하는 것뿐만 아니라preventDefault
, 도 호출합니다.stopImmediatePropagation
이벤트에서.
$('#exportForm').submit(function(e){
e.preventDefault();
e.stopImmediatePropagation();
$.ajax({
type: "POST",
url: $(this).attr( 'action' ),
data: $(this).serialize(),
success: function( response ) {
console.log( response );
}
});
return false;
});
대부분의 경우, 이 기능을 사용하고 있을 수 있습니다.button
또는submit
Ajax 이벤트를 트리거합니다.이것을 시험해 보세요.
$('#exportForm').submit(function(e){
e.preventDefault();
$.ajax({
type: "POST",
url: $(this).attr( 'action' ),
data: $(this).serialize(),
success: function( response ) {
console.log( response );
}
});
return false;
});
jQuery Validation 등 어떤 종류의 검증을 사용하는 경우 폼은 두 번 제출됩니다.그 이유는 다음과 같습니다.$('#exportForm').submit
사용자가 직접 작성하면 확인 플러그인은 모든 필드를 성공적으로 검증한 후 양식을 제출합니다.
NB : jQuery Validation을 사용하는 경우 사용하지 마십시오..submit()
대신 을 사용합니다.
간단하게 사용할 수 있습니다.e.stopImmediatePropagation();
:
예를 들어 다음과 같습니다.
$('#exportForm').submit(function(e){
e.stopImmediatePropagation();
Chris Sercombe가 지적한 바와 같이 e.stopimediatePropagation()은 동작하며 확실히 문제를 해결하지만 사용할 필요는 없습니다.당신의 코드 어딘가에 문제가 아직 존재합니다.2개의 투고 요구를 송신하는 방법의 예를 나타냅니다.
AngularJS 를 사용하고 있는 경우, 「HandleAjaxController」라고 하는 컨트롤러를 작성했다고 하면, 이 ng-Controller 를 div 에 할당하고, 이 ng-Controller 를 inner div 에 할당할 수 있습니다.이것에 의해, 투고 요구가 2 회 송신됩니다.그래서:
<div ng-controller='HandleAjaxController'>
<div ng-controller='HandleAjaxController'>
<button id="home" type="button" class="btn btn-success">Send data</button>
NG 루트에서 컨트롤러를 여기에 설정했기 때문에 이 때문에 한 번 큰 스트레스를 받았습니다.
$routeProvider
.when("/", {
templateUrl : "src/js/partials/home.html",
controller : "HandleAjaxController"
})
집에 다시 세팅했어요.html:<div ng-controller='HandleAjaxController'>
어쨌든, 그것은 2개의 투고가 송신되는 방법의 한 예입니다.
다른 js 코드를 확인해야 합니다.아마도 두 번 "송신" 이벤트를 트리거할 수 있습니다.내 경우 버튼 하나에 대한 클릭 핸들러에서 "return false"를 잊어버렸다.
여기 https://stackoverflow.com/a/15041642/4412545에서 답변한 바와 같이 jquery.displusional-min.disples ref를 두 번 추가했습니다.
거의 같은 문제를 안고 있는 사람에게는 jQuery 이벤트를 function(){}에서 제어해야 한다고 말할 수 있습니다.따라서 ajax POST로부터의 요구를 1개만 받는 것이 최선입니다.
$(document).ready(function {
$("#exportForm").click(function{
$.ajax({
type: "POST",
url: "#", //your url
data: data, //your variable
success: function(){
//do something here
}
});
});
});
다음과 같이 두 번째 함수를 호출하는 함수가 아닙니다.
$(document).ready(function {
exportingForm();
function exportingForm(){
$("#exportForm").click(function{
$.ajax({
type: "POST",
url: "#", //your url
data: data, //your variable
success: function(){
//do something here
}
});
});
}
});
같은 클래스에 여러 요소가 있는 경우에도 이 문제가 발생할 수 있습니다.
<button class="downvote">
<img src="/img/thumbs-down.png" class="downvote">
</button>
이 문제는 php 폼의 버튼 대신 div를 사용하여 해결할 수 있습니다.Ajax를 사용하기 때문에 버튼이 필요하지 않습니다.
언급URL : https://stackoverflow.com/questions/20195483/jquery-ajax-form-submits-twice
'source' 카테고리의 다른 글
스프링 부트 검증 주석 @Valid 및 @NotBlank가 작동하지 않음 (0) | 2023.02.22 |
---|---|
Angular에 몇 가지 작은 유틸리티 기능을 추가하는 방법JS 어플리케이션? (0) | 2023.02.22 |
Boost 속성 트리를 사용하여 어레이 읽기 (0) | 2023.02.22 |
@JsonProperty 필드 및 getter/setter의 주석 (0) | 2023.02.18 |
React useState() 후크를 사용한 상태 개체 업데이트 및 병합 (0) | 2023.02.16 |