2014-04-24 3 views
0

안녕하세요 저는 jQuery를 사용하지 않고 Ajax를 사용하는 오래된 방법을 사용하고 있습니다. 내 아약스 코드가 false를 반환하면 양식 제출을 중단하고 싶습니다. 제출하고 jsp 형식으로 돌아갈 때 Ajax 함수를 호출합니다. checkCaptcha.jsp 페이지Ajax가 false를 반환하는 경우 양식 제출을 방지하는 방법

다음
function checkCaptcha1(){ 
alert("inside checkCaptcha1"); 
//alert(document.signupform.recaptcha_response_field.value.trim()); 
var recaptcha_challenge_field = document.signupform.recaptcha_challenge_field.value.trim(); 
alert(recaptcha_challenge_field); 
var recaptcha_response_field = document.signupform.recaptcha_response_field.value.trim(); 
alert(recaptcha_response_field); 
if(recaptcha_response_field.trim()==""){ 
    document.getElementById("captcha").innerHTML = "Enter CAPTCHA Code"; 
    return false; 
}else{ 
    xmlHttp=GetXmlHttpObject(); 
    alert(XMLHttpRequest); 
    if (xmlHttp==null) 
    { 
     alert ("Browser does not support HTTP Request"); 
     return false; 
    } 
    var url="../ajax/checkCaptcha.jsp"; 
    url=url+"?recaptcha_challenge_field="+recaptcha_challenge_field+"&"+"recaptcha_response_field="+recaptcha_response_field; 
    alert(url); 
    xmlHttp.onreadystatechange=showData; 
    xmlHttp.open("GET",url,false); 
    xmlHttp.send(null); 
} 

} 

function showData(){ 
if (xmlHttp.readyState==4 || xmlHttp.readyState==200) 
{ 
    alert("hello"); 
    var showdata = xmlHttp.responseText; 
    alert(showdata); 
    var str = showdata.split("#$"); 
    //alert("inside checkCaptcha2 str="+str); 
    alert("Str[1]="+str[1]); 
    if(str[1]=="fail"){ 
     alert(str[1]); 
     document.getElementById("captcha").innerHTML = "CAPTCHA Validation Failed ! Try Again"; 
     //flag2=0; 
     //alert("Set flag2="+flag2); 
     return false; 
     //window.location.href("signup.jsp"); 
    } 
    else{ 
     //alert("Success"); 
     document.getElementById("captcha").innerHTML = ""; 
     //flag2 = 1; 
     //alert("Set flag2="+flag2); 
     //alert("Calling validate2()"); 
     //validate2(); 
     return true; 
    } 
} 
else{ 

} 
} 
function GetXmlHttpObject() 
{ 
alert("XML Object created"); 
var xmlHttp=null; 
try 
{ 
    // Firefox, Opera 8.0+, Safari 
    xmlHttp=new XMLHttpRequest(); 
} 
catch (e) 
{ 
    //Internet Explorer 
    try 
    { 
     xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
    } 
    catch (e) 
    { 
     xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
} 

return xmlHttp; 
} 

은 다음과 같습니다 : I는 제출하지 않을

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@ page import="net.tanesha.recaptcha.ReCaptchaImpl"%> 
<%@ page import="net.tanesha.recaptcha.ReCaptchaResponse"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
<% System.out.println("Hello check CAPTCHA"); %> 
<% try{ 
     String remoteAddr = request.getRemoteAddr(); 
     System.out.println(remoteAddr); 
     ReCaptchaImpl reCaptcha = new ReCaptchaImpl(); 
     reCaptcha.setPrivateKey("6LdlHOsSAAAAACe2WYaGCjU2sc95EZqCI9wLcLXY"); 

     String challenge = request.getParameter("recaptcha_challenge_field"); 
     System.out.println(challenge); 
     String uresponse = request.getParameter("recaptcha_response_field"); 
     System.out.println(uresponse); 
     ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remoteAddr, challenge, uresponse); 

     if (reCaptchaResponse.isValid()) { 
      System.out.print("#$success#$"); 
      out.print("#$success#$"); 
     } else { 
      System.out.print("#$fail#$"); 
      out.print("#$fail#$"); 
     } 
    }catch(NullPointerException e){ 
     e.printStackTrace(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
    %> 
</body> 
</html> 

여기

<form name="signupform" method="post" action="../TenantSignup" onsubmit="return checkCaptcha1()"> 
</form> 

가 아약스 코드 :
여기 내 코드입니다 ajax가 false를 반환하면 form을 반환하지만 ajax가 false를 반환하면 여전히 이 양식을 제출합니다. 여기 동기 요청을 사용하고 있는데, 심지어 같은 일이 비동기 요청을하게하더라도 이 발생합니다.

도와주세요. 감사합니다.

+0

'1'또는 '0'을 (를) 반환하십시오. – halkujabra

+0

폼의 전송이 아닌 다른 이벤트에서 Ajax 호출을 수행합니다. 어쩌면 제출 단추를 클릭하거나 마지막 입력에서 Enter 키를 누르는 것입니다. ajax 호출이 true를 반환하면 수동으로 양식을 제출하십시오. (내가 생각하기에 form.submit() 또는 그 줄에 뭔가가있는 것) – user3417400

+0

JQuery를 사용하여 양식을 제출하는 click 이벤트를 캡처하십시오. 그런 다음'return false'라고 말하면 제출을 취소합니다. – CSharper

답변

0

폼의 onsubmit 옵션이 매번 false를 반환하도록 강요하고 양식 데이터를 아약스를 통해 제출하므로 원하는 위치로 체크를 실행 한 다음 양식을 제출할 수 있습니다. 필요한 경우 다른 페이지로 리디렉션하십시오. 부피가 크지 만 너무 복잡하지 않은 양식에는 효과적입니다.

관련 문제