2013-05-14 111 views
2

enter image description here 我的控制器:AJAX獲取從Spring MVC控制器數據

@RequestMapping(value = "jobs") 
public void removeJobs(@RequestParam("username") String username, Model model) { 
    String []jobs = jobsFetcher(username); 
    model.addAttribute("list", jobs); 
} 

我的jsp中:

<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<!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=UTF-8"> 
    <title>Insert title here</title> 
    <link type="text/css" rel="stylesheet" 
href="<c:url value="public/files/styles/jobManager.css" />" /> 

<script type="text/javascript"> 
function ajaxFunction(username) { 
    var xmlhttpReq = crossBrowserAjaxObject(); 
    if (xmlhttpReq) { 
     xmlhttpReq.open("get", "jobs", true); 
     xmlhttpReq.onreadystatechange = handleServerResponse(xmlhttpReq); 
     xmlhttpReq.setRequestHeader('Content-Type', 
       'application/x-www-form-urlencoded'); 
     xmlhttpReq.send("username=" + username); 
    } 
} 

function crossBrowserAjaxObject() { 
    var xmlhttp; 
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp = new XMLHttpRequest(); 
    } else {// code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    return xmlhttp; 
} 

function handleServerResponse(xmlhttpReq) { 
    //var xmlhttp = new XMLHttpRequest(); 
    return function() { 
     alert(xmlhttpReq.readyState); 
     if (xmlhttpReq.readyState == 4 && xmlhttpReq.status == 200) { 
      alert(xmlhttpReq.responseText); // this is ok 
      // HERE HOW DO I GET THE MODEL OBJECT AS A RESPONSE COMMING FROM SERVLET & 
      // USE IN MY JSP FILE ? 
     } 
    }; 
} 
</script> 
</head> 
<body> 
<div> 
    <div class="leftDiv"> 
     <a href="#" onclick="ajaxFunction('JAMES')">JAMES</a> 
     <a href="#" onclick="ajaxFunction('David')">David</a> 
     <a href="#" onclick="ajaxFunction('Catrina')">Catrina</a> 
     <a href="#" onclick="ajaxFunction('Cathy')">Cathy</a> 
     <a href="#" onclick="ajaxFunction('Paul')">Paul</a> 
    </div> 

    <div class="rightDiv"> 
     <!-- HOW DO I GET THE JOB LIST & USE IT HERE USING MY AJAX ? --> 
     <c:forEach items="???" var="task"> 
      <p>${task}</p> 
     </c:forEach> 
    </div> 
</div> 
</body> 
</html> 

現在,正如我的圖片裏面提到的,我想我的右div元素變化時我點擊員工而不刷新整個頁面。

我唯一不知道的是當xmlhttpReq.responseText返回給我時,我該如何獲取使用Ajax進行一系列作業的modelelement &用它來渲染頁面...

換句話說,在Ajax調用&使用Ajax本身來製作我的頁面後,我將如何從控制器中獲取參數?

你有任何想法或建議,或可以幫助我通過這個?

(順便說一下,這些代碼還沒有進行測試!)

回答

3

看看jQuery的它使Ajax請求相當簡單。

您需要更改控制器方法以在返回類型中包含註釋@responsebody。不要爲模型中的內容添加Ajax請求,除非你返回一個新的ModelAndView,否則它將不起作用。

here is an intro

+0

我看到了,看起來不錯,也很有幫助,但它沒有涵蓋我的主要問題。我想知道如何在ajax請求之後使用來自控制器的模型屬性並在jsp頁面中使用它? – Mehdi 2013-05-14 12:24:42

+0

除非您返回新的模型和視圖(它將打開一個新頁面),否則不能將模型與ajax請求一起使用。哪個有點擊敗ajax的重點。 – NimChimpsky 2013-05-14 12:25:08

+0

你能解釋一下嗎?或者向我展示任何涵蓋AJAX和Servlet之間關係的規範? – Mehdi 2013-05-14 12:35:25

1

一旦你使用註釋@ResponseBody提到寧姆,xmlhttpReq.responseText的價值將是一個JSON編碼字符串。看看這篇文章解釋瞭如何解析JSON字符串: Parse JSON in JavaScript?

4

Spring MVC 3和JQuery是執行ajax請求和響應的最佳組合之一。你需要這個jar「jackson-mapper-asl」。定義處理Ajax請求並返回json響應的removeJobs控制器。 @ResponseBody將自定義對象轉換爲等效的json響應對象。

function madeAjaxCall(){ $.ajax({ type: "post", url: "jobs", cache: false, data:{key:value;key:value}, success: function(response){ //user your data for view }, error: function(){ alert('Error while request..'); } }); } - 
相關問題