我有一個帶GoogleMaps的Struts2 Web。我想加載保存在SQL DDBB中的標記列表。爲此,我嘗試了jQuery和Ajax。在這裏,您是代碼:如何使用jQuery從struts2動作獲取數據?
loadMarkers.java
public class loadMarkers extends ActionSupport implements ServletRequestAware,ServletResponseAware{
//Variables de sesion/cookie
FunctionClass ses;
protected HttpServletResponse servletResponse;
protected HttpServletRequest servletRequest;
private String userID="";
//Variables del marker
private List<marker> markersList = new ArrayList<marker>();
public String execute() throws Exception{
FunctionClass friends = new FunctionClass();
//Leemos de la cookie
for(Cookie c : servletRequest.getCookies()) {
if (c.getName().equals("userID"))
userID = (c.getValue());
}
System.out.println("en el loadMarkers");
connectionBBDD con = new connectionBBDD();
markersList = con.loadMarkers(userID);
return SUCCESS;
}
我想在JavaScript中使用markerList陣列,以創建標記。
這是struts.xml的文件:
<package name="jsonActions" namespace="/test" extends="json-default">
<action name="LoadMarkers" class="web.localizadroid.maps.loadMarkers">
<interceptor-ref name="basicStack"/>
<result type="json">
<param name="root">markersList</param>
</result>
</action>
</package>
在這裏,你的JavaScript(jQuery的)代碼:
function loadMarkersJ(){
alert("dentro");
$.ajax({
type : "post",
url : "LoadMarkers",
dataType: "json",
success : function(data) {
alert(data);
var image = new google.maps.MarkerImage ('http://i53.tinypic.com/ettquh.png');
var jSon_Object = eval("(" + data + ")");
//For para analizar los datos (Json) obtenidos de la BBDD
for (x = 0; x < jSon_Object.length; x++) {
var markersArray = [];
var myLatlng = new google.maps.LatLng(jSon_Object[x].lat, jSon_Object[x].lon);
markerLoaded = new google.maps.Marker({
position : myLatlng,
map : map,
icon: image,
title: "NOMBRE: " + jSon_Object[x].tarjetName + "\n" + "ANOTACIONES: " + jSon_Object[x].anotaciones + "\n" + "TIME: " + jSon_Object[x].time
});
markersArray.push(markerLoaded);
if (markersArray) {
for (i in markersArray) {
alert("entro en forColocaMarkers");
if (markersArray[i].getAnimation() != null) {
markersArray[i].setAnimation(null);
} else {
markersArray[i].setAnimation(google.maps.Animation.BOUNCE);
}
markersArray[i].setMap(map);
}
}
}
}
});
}
從success : function(data) {
到最後,是JavaScript的代碼來創建de標記,這是可以的。問題是,誰是Ajax,因爲我沒有得到通過jSon數據返回獲取markerList數組...我認爲問題是在$ .ajax的url屬性...我嘗試了loadMarkers.action和loadMarkers,但沒有發生。當我執行網絡時,僅打印警報alert("dentro")
,警報alert(data)
從未打印過。
我忘了添加代碼,我調用Javascript函數(loadMarkersJ)。您在這裏:
<p><s:a action="LoadMarkers.action" namespace="/test" onclick="loadMarkersJ(this)">Cargar Marcadores S</s:a></p>
有人可以幫助我嗎?
嘗試使用Firebug看到Ajax請求和響應的細節。 – 2011-02-02 17:13:55
同意上面的內容,根據你的代碼,你應該能夠將你的瀏覽器指向「/ test/LoadMarkers」並獲得json的頁面/文件,如果你沒有,那麼JS沒有任何幫助。我說頁面/文件,因爲FF通常會產生一個文件來保存,而Chome會顯示一個json頁面。 – Quaternion 2011-02-02 17:39:32