2009-06-26 6 views
0

JavaScript 메서드에서 ajax 호출을 통해 스프링 MVC 컨트롤러를 호출하려고합니다. 자바 스크립트 메서드는 Prototype 라이브러리를 사용하여 ajax 호출을 만듭니다. 컨트롤러는 JSP를 출력으로 throw합니다. 나는 응답이 실종 됐어 뭐라는 issue.Here이 코드가 될 수 얻을 것으로 보인다 그러나 내가 로그 메시지에서 볼 수있는 컨트롤러를 칠 수 있어요 ....스프링 MVC 및 프로토 타입 JavaScript


    
function submitNewAjxCall() {
alert('test');
new Ajax.Request('SimpleApp/home.htm',
{
method:'post',
parameters: $('formId').serialize(true),
onComplete: showresult
});
}
function showresult(resultdata) {
alert(resultdata.responseText); ****//this method is not called.....****
}


home.htm 포인트 이 컨트롤러로 도움을

public ModelAndView handleRequest(HttpServletRequest request, 
      HttpServletResponse response) throws Exception { 
     System.out.println("HomeController : " + ++i); 
     return new ModelAndView("home"); 
    } --- this throws home.jsp

감사합니다.

+0

:) – skaffman

답변

1

Ajax 응답을 받고 내용이 무엇인지 확인하려면 Firebug (Net 탭)로 확인하십시오. 전체 HTML 페이지가 아니라 컨트롤러가 수행 한 작업에 대해 알려주는 JavaScript 전용 JSON 객체를 반환하는 것이 좋습니다. 컨트롤러에 AJAX GET 속성을 추가하여 ModelAndView를 반환하는 대신 일반 JSON을 응답 본문에만 출력 할 수도 있습니다. Prototype에서 onSucess를 사용해보십시오. 어쩌면 다음

function submitNewAjxCall() 
{ 
new Ajax.Request('SimpleApp/home.htm?ajax=true', 
{ 
    method: 'post', 
    parameters: $('formId').serialize(true), 
    onComplete: function(transport) 
    { 
    alert(transport.responseText); 
    } 
}); 
} 

편집을 작동 할 수 있습니다 : 직접 JSON를 작성하려면 (예 : 직렬로 Flexjson를 사용하여) 당신 (주석) 봄 컨트롤러에서 이것을 사용할 수 있습니다

형식의 승리입니다
@RequestMapping(value = "/dosomething.do", method = RequestMethod.GET, params = "ajax=true") 
public void getByName(
    @RequestParam(value = "name", required = true) String name, 
    HttpServletResponse response 
    ) 
{ 
    response.setContentType("application/json"); 
    try 
    { 
    OutputStreamWriter os = new OutputStreamWriter(response.getOutputStream()); 
    List<DomainObjects> result = this.domainObjectService.getByName(name); 
    String data = new JSONSerializer().serialize(result); 
    os.write(data); 
    os.flush(); 
    os.close(); 
    } catch (IOException e) 
    { 
    log.fatal(e); 
    } 
} 
+0

Spring Controller에서 출력을 JSON으로 직접 출력 스트림에 다시 써야합니다. 기존 컨트롤을 확장하고이 기능을 제공해야합니다. – Rajat

+0

Flexjson을 인코더로 사용하여 기본 JSON 컨트롤러를 작성했습니다. 스프링 컨트롤러의 예제도 추가했습니다. – Daff