2009-06-26 3 views
0

Я пытаюсь вызвать контроллер Spring MVC через вызов ajax из метода JavaScript. Метод javascript использует библиотеку Prototype для вызова ajax. Контроллер выдает JSP в качестве вывода. Я могу ударить контроллер, как я могу видеть в логах, однако ответ, кажется, чтобы получить lost.What может быть issue.Here это код ....Spring 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

Проверьте с помощью Firebug (вкладка Net), если вы получите ответ Ajax и посмотрите, каков его контент. Возможно, имеет смысл не возвращать всю HTML-страницу, а конкретный JavaScript-объект JSON, который говорит что-то о том, что только что сделал контроллер. Возможно, добавьте свойство ajax GET к вашему контроллеру, где вы просто выводите простой JSON в тело ответа, вместо того, чтобы возвращать ModelAndView. Попробуйте использовать onSucess в Prototype. Может быть, может работать тогда

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

Edit: Для того, чтобы написать 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

В контроллере весны нам необходимо записать выход обратно в выходной поток непосредственно как JSON. Нам придется расширять существующие элементы управления и предоставлять эту функцию. – Rajat

+0

Я написал базовый контроллер JSON, используя Flexjson в качестве кодировщика. Я также добавил пример контроллера пружины. – Daff

Смежные вопросы