2011-09-01 3 views
1

클라이언트 쪽 코드에서 내 서블릿에 AJAX 호출을하고 있습니다. 요청 방법으로 GET을 사용하는 경우. 모든 것이 효과가 있으며 응답이 되돌아옵니다. 하지만 POST로 요청을 보내면 서블릿이 응답을 보내지 못합니다. 로그에서 나는 서블릿 "request"객체가 null 인 것을 알았습니다. POST로 ajax 호출을 만들었습니다. 이 게시물에 따르면 : Servlet response to AJAX request is empty, 나는 동일한 출처 정책에 대한 헤더를 설정합니다. 당신이 게시물에 모든 데이터를 할 경우서블릿에 AJAX POST 요청을하지 못합니다.

public void doProcess (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     logger.info("doProcess::start..."+request.getQueryString()); 
     response.setHeader("P3P","CP='NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM'"); 
    response.setHeader("Access-Control-Allow-Origin","*"); 
    response.setHeader("Access-Control-Allow-Credentials","true"); 
    response.setHeader("Access-Control-Allow-Methods","POST, GET"); 
} 

이 request.getQueryString()

+0

if 문을 ajax에서 확인하십시오. 페이로드없이 항상 xmlhttp.send()를 실행하는 것처럼 보입니다. 매번 어떤 조건부 옵션이 선택되는지 점검하라. – doNotCheckMyBlog

+0

실제로 매개 변수가없는 경우 GET 메서드를 사용하여 요청합니다. 더 명확하게 편집 된 코드 – indusBull

답변

3

에 널 예외가 발생합니다 :

function aimslc_ajaxCall(url,callback, postParams){ 
    var xmlhttp = null 
    if (window.XMLHttpRequest){ 
    xmlhttp=new XMLHttpRequest(); 
    } 
    xmlhttp.onreadystatechange=function(){ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
    eval(callback+"("+xmlhttp.responseText+")"); 
    } 
    } 

    if(postParams!=null && typeof postParams!="undefined"){ 
      xmlhttp.open("POST",url,true); 
    xmlhttp.send(postParams); 
    }else{ 
      xmlhttp.open("GET",url,true); 
     xmlhttp.send(); 
    } 
} 

서블릿 코드 : 아래

참조 내 코드입니다 url이 아닌 요청 본문에 있습니다. here에서 getQueryString은 URL의 내용 만 가져옵니다.

요청 본문을 얻는 방법은 here을 참조하십시오.

또한 데이터가 이름/값 쌍인 경우 getParameter 및 관련 방법을 사용할 수 있습니다.

요청이 null 인 경우 서블릿에 doPost을 구현합니까?

+0

이것은 의미가 있습니다. doPost()가 있습니다. 같은 질문에 이어 "request.getAttribute()"와 "request.getParameter()"의 차이점은 무엇입니까? 내가 사용하는 서블릿에서 request.getAttribut()는 요청 매개 변수를 검색하는 데 사용됩니다. 이것은 GET에서는 작동하지만 POST에서는 작동하지 않는 것 같습니다. – indusBull

+0

getParameter는 from key = val의 매개 변수를 가져 오는 데 사용됩니다. get 속성은 동일하지 않은 요청 속성을 가져옵니다. 당신은 getParameter와 관련 메소드를 사용하고 싶습니다. – hvgotcodes

+0

@indusBull :'HttpServletRequest'는'getParameter()'와'getAttribute()'메소드를 가지고 있습니다. 요청 ** 매개 변수 **를 반환한다는 것을 * 어느 것으로 생각하십니까? 논리적으로 생각해보십시오. – BalusC