2009-08-11 3 views
5

양식의 onsubmit()에서 ajax 요청을 보낼 수 있습니까? 브라우저가 원래 요청을 보내는 것보다 오랫동안 내 요청을 보내는 경우로드 된 페이지의 위치가 변경되는 즉시 요청이 삭제되므로 가끔씩 그 요청이 삭제됩니다. 서버를 때리면 안된다.양식 제출 전에 Ajax 요청 보내기

기본적으로 로그인 이벤트를 수집하는 감사 로그 수집기를 추가하고 싶습니다. 침입을 최소화하면서 기존 앱에 연결하려고합니다.

+0

AJAX 요청에 대해 특정 JavaScript 프레임 워크를 사용하는 경우 알려 주시면보다 구체적인 답변을 드릴 수 있습니다. –

답변

18

이것은 쉽게 달성 할 수 있습니다. AJAX 요청이 완료 될 때까지 양식 제출을 보류하십시오.

양식에 onsubmit 속성을 호출하여 AJAX 함수를 호출하고 false를 반환합니다 (양식 제출을 취소 함). AJAX 호출이 완료되면 프로그래밍 방식으로 양식을 제출하십시오. 예를 들어

이 문제를 해결하는 또 다른 방법이있다

<form name="myform" onsubmit="javascript: startAjax(); return false;"> 
... 
<script type="text/javascript"> 
function startAjax() {} // Calls ajaxComplete() when finished 

function ajaxComplete() 
{ 
    document.myform.submit(); 
} 
</script> 
+1

Ajax 요청의 결과에 관심이없고 Ajax 요청을 보낸 직후에 양식을 제출하려는 경우 어떻게해야합니까? 이 방법을 사용하고'startAjax()'함수 자체에서 명시 적으로 폼을 제출할 수 있습니까? –

+0

루프에 들어 가지 않습니까? –

0

, 그건 당신이 동기로 아약스 전화를 걸 수 있습니다.

예 : 이로써

xmlhttp.open("GET", imageUrlClickStream, false); 

우리는 양식 제출은 응답을 얻을 아약스 호출 할 때까지 대기해야 할 수 있습니다.

+0

이 방법이 효과가있을 수 있지만 매우 바람직하지 않습니다. 브라우저가 다른 JavaScript 코드를 계속 실행하기 위해 응답을 기다려야하기 때문에 동기 요청을 수행하면 페이지 실행이 멈 춥니 다. – HoLyVieR

0

onsubmit을 onclock으로 바꾸면 루프가 작동하기 때문에 나를 위해 잘 작동합니다.

<form name="myform" onclick="javascript: startAjax(); return false;"> 
... 
<script type="text/javascript"> 
function startAjax() {} // Calls ajaxComplete() when finished 

function ajaxComplete() 
{ 
    document.myform.submit(); 
} 
</script>