2011-02-02 63 views
1

我有一個帶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> 

有人可以幫助我嗎?

+2

嘗試使用Firebug看到Ajax請求和響應的細節。 – 2011-02-02 17:13:55

+0

同意上面的內容,根據你的代碼,你應該能夠將你的瀏覽器指向「/ test/LoadMarkers」並獲得json的頁面/文件,如果你沒有,那麼JS沒有任何幫助。我說頁面/文件,因爲FF通常會產生一個文件來保存,而Chome會顯示一個json頁面。 – Quaternion 2011-02-02 17:39:32

回答

0

爲什麼我們不能只是提供內容類型信息JSP。這個對我有用。

我們不需要下載任何插件來實現對struts操作的JSON支持。

我們可以下載任何json轉換器,如GSON. 使用以下命令將您的對象轉換爲json格式。

Gson gson = new Gson(); 
json = gson.toJson(events); 
return SUCCESS; 

在你的成功JSP

<%@ taglib prefix="s" uri="/struts-tags"%> 
<%@page contentType="application/json" %> 
<s:property value="json" escape="false"/> 
0

的JavaScript函數調用後添加return false

<p><s:a action="LoadMarkers.action" namespace="/test" onclick="loadMarkersJ(this); return false;">Cargar Marcadores S</s:a></p> 

檢查了這一點:

https://stackoverflow.com/a/20217387/1360694

相關問題