2012-03-12 28 views
5

Tôi đang cố chuyển dữ liệu từ bộ điều khiển lò xo sang javascript nhưng không có may mắn. Tôi có nên sử dụng ajax để làm điều này không? Xin ông có thể cho tôi một số gợi ý về việc này không? cách tốt nhất là gì?cách chuyển đối tượng json từ java sang javascript?

Trong điều khiển của tôi, tôi cố gắng để truyền dữ liệu:

@RequestMapping(value = "/map", method = RequestMethod.GET) 
public String map(ModelMap model) { 

... 

model.addAttribute("trackpoints", json); 


return "map"; 

} 

nơi json là một đối tượng gson (JSONObject) chứa:

{"trackpoints":[{"latitude":52.390556,"longitude":16.920295}, 
{"latitude":52.390606,"longitude":16.920262}]} 

trong file jsp của tôi, tôi có:

<script type="text/javascript"> 

var myJSON = {}; 

myJSON = ${trackpoints}; 

document.writeln(myJSON.trackpoints); 

</script> 

nhưng kết quả là:

[object Object],[object Object] 

Tôi giải thích chi tiết hơn:>

tôi muốn sử dụng bản đồ google api để hiển thị bản đồ và vẽ đường dẫn phối hợp từ nhiều lat, longs. tôi nghĩ json sẽ tốt hơn danh sách, nhưng tôi có thể sai.

tôi cố gắng điều chỉnh mã từ tài liệu - trong mã bên dưới tôi cố gắng thay thế tọa độ được mã hóa bằng vòng lặp và giá trị từ đối tượng json.

<script type="text/javascript"> 
function initialize() { 
    var myLatLng = new google.maps.LatLng(0, -180); 
    var myOptions = { 
     zoom : 3, 
     center : myLatLng, 
     mapTypeId : google.maps.MapTypeId.TERRAIN 
    }; 

    var map = new google.maps.Map(document.getElementById("map_canvas"), 
      myOptions); 
    var flightPlanCoordinates = [ 
      new google.maps.LatLng(37.772323, -122.214897), 
      new google.maps.LatLng(21.291982, -157.821856), 
      new google.maps.LatLng(-18.142599, 178.431), 
      new google.maps.LatLng(-27.46758, 153.027892) ]; 
    var flightPath = new google.maps.Polyline({ 
     path : flightPlanCoordinates, 
     strokeColor : "#FF0000", 
     strokeOpacity : 1.0, 
     strokeWeight : 2 
    }); 

    flightPath.setMap(map); 
} 
</script> 

tôi hy vọng nó bây giờ rõ ràng hơn :)

Trả lời

1

myJSON.trackpoints là một mảng của hai đối tượng. Nếu bạn muốn viết nó dưới dạng HTML bạn có thể làm một cái gì đó như thế này:

function writeCoordinates(coords) { 
    document.writeln('<div>lat = ' + coords.latitude); 
    document.writeln(', lon = ' + coords.longitude + '</div>'); 
} 

int len = myJSON.trackpoints.length; 
for (int i = 0; i < len; i++) { 
    writeCoordinates(myJSON.trackpoints[i]); 
} 

BTW: JSON là thực sự hữu ích khi bạn đang sử dụng yêu cầu AJAX, nhưng đối với "bình thường" yêu cầu nó tốt hơn để đưa đồng bằng các đối tượng Java vào mô hình, ví dụ:

mùa xuân Bộ điều khiển:

List<Coordinate> trackpoints = ... 
model.addAttribute("trackpoints", trackpoints); 

JSP:

<c:forEach items="${trackpoints}" var="coord"> 
    <div>lat = ${coord.latitude}, lon = ${coord.longitude}</div> 
</c:forEach> 

cho trước, rằng lớp Coordinate có các phương pháp getLatitude()getLongitude(). Phương thức đó trong bộ điều khiển Spring thậm chí có thể được sử dụng cho cả hai yêu cầu "bình thường" và AJAX, bằng cách sử dụng bộ mã hóa JSON, như JacksonContentNegotiatingViewResolver.

0

Hãy xem tại địa chỉ: http://jsfiddle.net/AHue8/4/

Tôi đoán take-away ở đây là bạn cần phải xác định các yếu tố trong đối tượng TrackPoint bạn muốn và bạn countrol cách những được hiển thị trong trình duyệt. Vì một "trackPoint" không phải là một kiểu dữ liệu nguyên thủy (nó là một đối tượng có 2 thành phần dữ liệu vĩ độ và kinh độ), trình duyệt không biết cách giải thích nó, vì vậy bạn phải nói nó như thế nào.