2014-03-04 1 views
0

나는,이 코드의 포인트는 짧은 시간 지연을 만들려면 다음 jQuery 코드입니다, 그래서 Ajax 요청이 제대로 실행 시간을 가져옵니다제출 지연 결과는

$('#form_id').submit(function(e) { 

    e.preventDefault(); 
    $submit_url = $(this).data('submitUrl'); 
    $submit_url = $submit_url.replace('http://','').replace(window.location.host,''); 

    if ($(this).data('toBeAjaxSubmitted') == true) { 
     $.ajax($submit_url, { 
      type : $(this).attr('method'), 
      data : $(this).serialize(), 
      complete : function(data) { 
       $(this).data('toBeAjaxSubmitted', false); 
       $('#form_id').submit(); 
      } 
     }); 
    } 
}); 

은 무슨 일입니다 , 구성 요소가 항목을 데이터베이스에 저장하기 위해 양식을 제출해야하는 제출 URL로 시작합니다. 그러나 사용자 입력이 필요하므로 지불 게이트웨이 URL에 직접 제출해야 사용자가 지불하게됩니다.

위의 코드는 AJAX 요청을 생성하지만 일반적인 다시 게시 동작으로 돌아 가지 않습니다 ($('#form_id').submit() 통해).

양식을 계속 제출하지만 게이트웨이 URL에 게시하거나 리디렉션하지 않습니다.

내가 뭘 잘못하고 있니? (가) 좀 더 디버깅 후 나를 위해 일한 다음

+0

감사합니다. b. 'java' 태그는 내가 생각한 사고였습니다. –

답변

1

:

$('#chronoform_Online_Submission_Step8_Payment').submit(function(e) { 
    var form = this; 
    e.preventDefault(); 
    $submit_url = $(this).data('submitUrl'); 
    $submit_url = $submit_url.replace('http://','').replace(window.location.host,''); 

    if ($(this).data('toBeAjaxSubmitted') == true) { 
     $.ajax($submit_url, { 
      type : $(this).attr('method'), 
      data : $(this).serialize(), 
      complete : function(data, status) { 

      } 
     }).done(function() { 
      form.submit(); 
     }); 
    } 
}); 

정말 잘못된 길에 저를 넣어 무엇 DevTools로가 열려있는 동안 크롬의 개발자 도구에서 나는 다음과 같은 옵션이 ('사용 안 함 캐시를 활성화했다고했다) ' 그리고 이것은 사파리, 파이어 폭스 (어느 쪽이 효과적 이었는지)와 그렇지 않은 크롬간에 일관성없는 행동으로 몇 가지 골치 거리를 불러 일으켰습니다.

+0

분명히하기 위해 변경은'this.submit()'vs'$ (this) .submit()'을 사용하고 있습니다. 'this.submit()'은 submit 이벤트를 트리거하지 않고 양식을 제출하므로 무한 루프가 발생하지 않습니다. –

0

어쨌든 fiddling이 접근 방식은 무엇입니까?

$('#form_id').submit(function(e) { 

    // closures 
    var $form = $(this); 
    var fAjaxComplete = function(data) { 
     // don't send the ajax again 
     $form.data('toBeAjaxSubmitted', 'false'); 

     // maybe do some form manipulation with data... 

     // re-trigger submit 
     $form.trigger('submit'); 
    }; 
    var oAjaxObject = { 
     type : $form.attr('method'), 
     data : $form.serialize(), 
     complete : fAjaxComplete 
    }; 

    var sSubmitUrl = $form.data('submitUrl'); 
    // scrub url 
    sSubmitUrl = sSubmitUrl.replace('http://','').replace(window.location.host,''); 

    // if ajax needed 
    if ($form.data('toBeAjaxSubmitted') != 'false') { 
     // go get ajax 
     $.ajax(sSubmitUrl, oAjaxObject); 
     // don't submit, prevent native submit behavior, we are using ajax first! 
     e.preventDefault(); 
     return false; 
    } 

    // if you got here, go ahead and submit 
    return true; 

});