2013-08-03 3 views
0

양식이 실제로 제출되지 않도록 Ajax가 실행되고 'e.preventDefault();'이 사용 된 양식이 있습니다.JavaScript/jQuery Pause 함수를 다시 실행하십시오.

내 문제 : Ajax가 성공한 후에야 양식을 서버에 제출하고 싶습니다.

  • 사용자는
  • 아약스는 몇 가지 정보를 전송 해고 '제출'을 클릭하면, 사용자는 페이지에 남아 :

    그래서 예를 들어 나는 다음과 같은 시나리오를 달성하기 위해 노력하고 있습니다.
  • Ajax가 다시 돌아 왔으며 이제 우리는이 기능을 success:의 기능으로 시작할 수 있습니다.
  • 성공 함수가 실행되고 사이트의 form data이 서버에 제출됩니다.

HTML :

<form name="demoFiler" action="save/uploadCreate.php" method="POST" enctype="multipart/form-data"> 

     //Some inputs, checkboxes radios etc. 

     <input type="submit" name="submitHandler" id="submitHandler" value="Upload" class="buttonUpload hideButton" /> 

    </form> 

자바 스크립트 :

$('#'+this.config.form).submit(function(e) { 
    var $this = $(this); 
    e.stopPropagation(); 
    e.preventDefault(); 

    //Necessary vars for the 'data' defined here 

    $.ajax({ 
     type:"POST", 
     url:this.config.uploadUrl, 
     data:data, 
     cache: false, 
     contentType: false, 
     processData: false, 
     success:function(rponse) { 
      // do something with rponse 
      $this.off('submit').submit(); // unbind the handler and submit 
     } 
    }); 
} 
+0

정말 올바른 방법이 아닙니다. AJAX 호출에 양식의 모든 작업을 수행하게하거나 오류를 리턴하십시오. 반환 결과 POST가 성공했다는 것을 나타내면 페이지를 폼 대상으로 다시로드 할 수 있습니다. 동기식 AJAX 호출로 브라우저를 일시 중지 할 수는 있지만 일반적으로 사용자 경험은 끔찍한 것으로 간주됩니다. – Pointy

+0

흠, 아약스 또는 uploadCreate.php를 통해 모든 것을 게시하고 부분적으로 또는 다른 하나를 통해 게시하지 않습니까? – user1775598

+0

예. 또 다른 옵션은 AJAX를 잊어 버리고 양식을 게시하는 것입니다. 그렇게하면 두 경우 모두 하나의 HTTP 요청 만 처리 할 수 ​​있습니다. 성공하면 2가 아닙니다. 별도의 두 HTTP 요청간에 유효한 양식 데이터의 유효성 상태에 의존하는 것은 위험합니다. – Pointy

답변

1

바인딩 A와 버튼 : 이미 jQuery를 사용하고 있기 때문에

document.getElementById(this.config.form).addEventListener("submit", submitMe, false); 

    function submitMe(e){ 
    e.stopPropagation(); e.preventDefault(); 

    //Necessary vars for the 'data' defined here 

    $.ajax({ 
     type:"POST", 
     url:this.config.uploadUrl, 
     data:data, 
     cache: false, 
     contentType: false, 
     processData: false, 
     success:function(rponse){ 
         //This is where we need our Success function to SUBMIT the form using uploadCreate.php 
     } 
    }); 

    } 
+0

이 시나리오에 대한 가장 쉬운 답변은 다음과 같습니다. – user1775598

0

같은 것을 시도 양식 제출 이벤트 대신 클릭 이벤트를 클릭 한 다음을 실행하십시오.ayax 콜백 success의 양식 요소에서 작동합니다.

$("#submitHandler").click(function(e) { 
    e.preventDefault(); 

    //Fill "data" variable 
    var data = {}; 

    //set the url 
    var url = "someurl"; 

    $.ajax({ 
    type:"POST", 
    url:url, 
    data:data, 
    cache: false, 
    contentType: false, 
    processData: false, 
    success:function(rponse){ 
     //test rponse then do below. 
     $("form[name=demoFiler]").submit(); 
    } 
    }); 
}); 
관련 문제