項目需求描述:page1中的ajax請求Controller,Controller負責將service返回的數據填充到page2中,並將page2整個頁面返回到page1中ajax的回調函數。
一句話表述:利用SpringMVC,以一個頁面作為響應返回給ajax。
接下來,我們將介紹怎樣將這樣的需求實現到SpringMVC中,廢話不多說,分步上代碼。
1. Jquery ajax請求
對這部分不太熟悉的同學可以移步我的另一篇博客詳解jQuery中ajax函數:$.get(),$.post(),$.ajax()。首先我們需要向Controller發送ajax請求。
function res(){
$.post('mine',{
qt:$('#mtext').attr('value')
},function(data) {
$('#queryresult').html(data);
});
}
page1頁面
<div id="queryresult"></div>
頁面中具體實現的內容不進行贅述,各位客官根據自身項目情況進行腦補即可。
2. SpringMVC處理ajax請求
先介紹一個SpringMVC中的注釋@Responsebody。使用@Responsebody標識的方法表示該方法的返回結果直接寫入HTTP response body中,一般在異步獲取數據時使用,在使用@RequestMapping后,返回值通常解析為跳轉路徑,加上@Responsebody后返回結果不會被解析為跳轉路徑,而是直接寫入HTTP response body中。比如異步獲取json數據,加上@Responsebody后,會直接返回json數據。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;
@Controller
public class DMController {
@Resource
private IDMService dmService;
@RequestMapping(value = "/mine",method = RequestMethod.POST)
public @ResponseBody ModelAndView textMine(String qt,ModelAndView m) throws IOException {
List<QueryResult> qrresults=dmService.getQueryResults(qt);//QueryResult是自定義的pojo
m.addObject("queryresults",qrresults);
m.setViewName("page2");
return m;
}
}
利用ModelAndView將Service中的結果值傳到page2頁面,並將ModelAndView對象返回到ajax。
page2頁面
<c:forEach items="${queryresults}" var="queryresults">
<div>
<p>${queryresults.resultTitle}</p>
<p>${queryresults.resultContent}</p>
</div>
</c:forEach>
至此,SpringMVC以頁面響應Ajax請求的整個過程也結束,整個過程還需要各位客官仔細理解,然后結合自己的實際需求進行改進。項目中運用到的場景如下圖。

