2013-02-09 7 views
1

field1field2에 포함 된 값이 마음에 들지 않으면 양식을 제출하면 PHP가 false을 반환합니다. 해당 필드가 마음에 들면 true을 반환합니다. 사용자가 양식을 제출하고 PHP가 false을 반환하면 경고가 나타납니다. 경고 창을 닫은 후 사용자가 해당 필드에 새로운 (양호한) 데이터를 즉시 입력하고 양식을 다시 제출하면 양식이 어떻게 든 두 번 제출됩니다. 왜? 이 문제를 어떻게 해결할 수 있습니까?jquery가 내 ajax 양식을 두 번 제출하는 이유는 무엇입니까?

$("form#myForm").on('submit',function() 
{ 
    $.ajax(
    { 
     type: "POST", 
     url: 'myfile.php', 
     dataType: 'html', 
     data: 
     { 
      field1:$("input[name=field1]").val(), 
      field2:$("input[name=field2]").val() 
     }, 
     success: function(data) 
     { 
      if(data == false) 
      { 
       alert('hello world'); 
      } 
      else 
      { 
       // stuff 
      } 
     } 
    }); 
    return false; 
}); 
+0

[jsbin] (http://jsbin.com/ujinon/3/edit)에서 작동하는 것처럼 보입니다. 제출 당 하나의 요청 만합니다. jsbin에서 실행되도록하기 위해'POST '를'GET'으로 변경하고 url을'#'으로 설정하고'data == false'를'true'로 바꿨습니다. HTH –

답변

1

아약스 게시물을 수행 중이므로 기본 제출 버튼 동작을 비활성화해야합니다. http://api.jquery.com/event.preventDefault/

+2

이것은 작동하지 않습니다. –

+0

false를 반환하면 같은 효과가 발생합니다. http://api.jquery.com/submit/ –

1

return false

$('#myForm').unbind('submit'); 
return false; 
4

같은 질문 2014 (jquery ajax form submits twice)에 요청하기 전에, 다음 아래의 코드를 추가하십시오.

e.preventDefault() 버튼과 앵커 링크에 대해서는 자체적으로 작동하지만 폼을 제출할 때는 나에게 적합하지 않습니다 (위의 낸시 코드와 동일).

내 아약스 게시 바로 앞에 e.stopImmediatePropagation();을 추가해야했습니다. 이로 인해 ajax 호출이 두 번 전송되지 않았습니다.

+0

OP에서 이유를 묻는 동시에 궁금합니다. – marcospgp

+0

왜 이런 일이 발생하는지 잘 모릅니다. 낸시는 "왜이 문제를 해결할 수 있습니까?"라고 물었 기 때문에 문제를 해결하는 방법에 대한 답변을 얻을 수 있었지만 그 이유는 알 수 없었습니다. – Robini

+0

나는 왜 내가 코드를 가지고 일어나는지 알았다. 의 javascript 태그가 복제되어 스크립트가 실행되어 후크가 두 번 연결되었습니다. – marcospgp

관련 문제