2011-11-28 3 views
0

Good Day.제출하기 전에 ajax 스크립트를 실행하십시오.

양식을 제출하기 전에 ajax 호출을 실행하는 데 문제가 있습니다. 난 그냥 초보자 웹 개발자 그래서 나와 함께 참아주세요.

내 코드는 다음과 같다 :

$(function() { 
$('#formname').submit(function() { 
    $.post('validation.php', $(this).serialize(), function(data) { 
    if(data == 'something') return true; 
    else return false; 
    }); 
} 
}); 

이 코드는 나를 위해 작동하지 않습니다. 코드가 잘못되었거나이를 달성 할 수있는 다른 방법이 있습니까? 사전에

덕분에,

+0

당신이 달성하려고하는거야? 제출하기 전에 확인 하시겠습니까? –

+0

예 Sandeep G B ... 내 데이터베이스의 레코드로 양식 내용의 유효성을 검사하고 싶습니다 ... – KiiroSora09

+0

피드백? 내 솔루션이 효과가 있었나요? – erimerturk

답변

1

당신은 제출 버튼을 클릭 이벤트를 정의 할 수 있습니다. 그런 다음 클릭하면 먼저 게시물을 작성한 다음 양식을 제출하십시오.

HTML :

<form id="target" action="destination.html"> 
    <input type="text" value="Hello there" /> 
    <input type="submit" value="Go" /> 
</form> 
<div id="other"> 
    Trigger the handler 
</div> 

JS :

$('#other').click(function() { 

    $.post('validation.php', $('#target').serialize(), function(data) { 
    if(data == 'something') { 
     $('#target').submit(); 
    } 
    }); 
}); 
+0

답장을 보내 주셔서 감사합니다. erimerturk ... 바로 최근에 나왔던 것입니다 ... 바로 지금 시도하고 있습니다 ... – KiiroSora09

+0

AJAX 콜백에서 false를 반환하면 정확히 무엇을 기대합니까? – ThiefMaster

+0

고마워요! 그것은 나를 위해 일했습니다. –

1

당신은하지 AJAX 콜백 내부 제출 핸들러에서 return false;해야합니다. 그러나 매개 변수 e을 수락 한 다음 AJAX 호출을 수행하기 전에 e.preventDefault();을 호출하도록 함수를 변경하는 것이 좋습니다. 유효성 검사에 성공하면 $('#formname')[0].submit();을 사용하여 제출 처리자를 다시 호출하지 않고 양식을 실제로 제출하십시오.

PS : 우수 jQuery form pluginvalidation plugin과 같은 플러그인을 사용하는 것이 더 좋습니다.

+0

선생님 ThiefMaster는 빠른 답변을 주셔서 감사합니다 ... 나는 당신의 제안을 시도하고 또한 플러그인을 조사 할 것입니다 ... – KiiroSora09

2

이 작업을 수행 할 수는 있지만 매우 못 생기고 실제로 원하지 않습니다.

$(function() { 
$('#formname').submit(function() { 
    var returnValue; 
    $.post({ 
    async: false, // This makes it possible 
    url: 'validation.php', 
    data: $(this).serialize(), 
    success: function(data) { 
     if(data == 'something') returnValue = true; 
     else returnValue = false; 
    } 
    }); 
    return returnValue; 
} 
}); 

하지만 왜 이것을 원하니? 다른 Ajax 함수를 수행하고 준비 할 수 있기 때문입니다. 그리고 아약스 요청을 마치면 document.location= "newlocation.html"을 할 수 있습니다. 이제는 아약스 요청이 완료 될 때까지 애플리케이션이 대기하기 때문입니다. 아약스 요청에 10 초가 소요될 경우 사람들은 10 초 동안 페이지를 사용할 수 없습니다.

항상 return false 인 경우 양식을 처리 할 Ajax 요청을 수행하십시오. 그리고 당신은 document.location을 수행하는 것이 더 나은 선택이 될 것입니다. 따라서 응용 프로그램이 멈추지 않습니다.

+0

선생님 Niels는 빠른 답장을 보내 주셔서 감사합니다 .. 나는 또한 당신의 방법을 시도 할 것입니다 ... 그러나 나는 생각합니다. 제출 단추에 ajax 호출을 넣고 유효한 Ajax 반환 값이 돌아 오면 양식을 제출하고 Ajax 요청이 아직 처리 중일 때 대기 메시지를 보냅니다 ... – KiiroSora09

+1

Sjax를 사용할 필요가 없습니다 이 목적을 위해. 비동기 콜백이 실행 된 후 쉽게 양식을 제출할 수 있습니다. – ThiefMaster

+0

+1, 동의합니다. 제출하기 전에 Ajax 호출이 필요하지 않습니다. 클라이언트 측 유효성 검사를 수행하고 데이터를 제출하십시오. 제출 된 데이터가 유효하지 않은 경우 (클라이언트 데이터를 신뢰할 수 없으므로 이중 유효성 검증을 수행해야 함) 오류를 다시 던집니다. –

관련 문제