Как получить данные из действия struts2 с помощью jQuery?

У меня есть Struts2 Web с GoogleMaps. Я хочу загрузить список маркеров, сохраненных в SQL DDBB. Для этого я пробовал использовать jQuery и Ajax. Вот код:

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;
}

Я хочу использовать массив markerList в Javascript для создания маркеров.

Это файл 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 для создания маркеров, и это нормально. Проблема связана с ajax, потому что я не могу получить массив markerList с помощью возврата данных jSon ... Я думаю, что проблема в атрибуте url из $ .ajax ... Я пробовал 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>

Кто-нибудь может мне помочь?


person Rafa Romero    schedule 02.02.2011    source источник
comment
Попробуйте использовать Firebug, чтобы просмотреть подробную информацию о запросе и ответе Ajax.   -  person Steven Benitez    schedule 02.02.2011
comment
Согласитесь с приведенным выше, согласно вашему коду, вы должны иметь возможность указать в браузере / test / LoadMarkers и получить страницу / файл json, если вы этого не сделаете, тогда никакое количество JS не поможет. Я говорю страница / файл, потому что FF обычно создает файл для сохранения, а Chome отображает страницу json.   -  person Quaternion    schedule 02.02.2011
comment
ОХ !!! Теперь у меня такая проблема! В Google Chrome я могу отображать файл Json, а в IE я могу его скачать, но мне это не нужно! Я хочу использовать данные, содержащие json, для создания маркеров! Как мне это сделать? Я не понимаю, что вы хотите сказать, чтобы вы могли указать свой браузер на / test / LoadMarkers ....   -  person Rafa Romero    schedule 03.02.2011


Ответы (3)


Рассматривали ли вы использование плагина Struts2-jQuery, который ДЕЙСТВИТЕЛЬНО упрощает разработку ajax с помощью Struts2, используемый это я сам

person vmg    schedule 02.02.2011
comment
Да, я хотел бы использовать плагин Struts2-jQuery, но я не знаю, как сделать весь код, который я показал, с тегами плагина Struts2-jQuery ... - person Rafa Romero; 02.02.2011
comment
С помощью плагина Struts2-jQuery вы можете использовать теги библиотеки, например ‹sj: form› ... вы это видите? - person Rafa Romero; 03.02.2011
comment
Это демонстрация плагина struts2-jQuery weinfreund.de/struts2-jquery-showcase/ index.action. Вы можете скачать все исходники с этого ресурса. По своему опыту могу сказать: за 4 дня я научился использовать плагин и переписал свое приложение с 6 действиями, чтобы оно работало без обновления страницы :) Так что стоит его изучить - person vmg; 03.02.2011
comment
Спасибо, такой матч! эта сеть фантастическая! Но можете ли вы помочь мне с удаленной ссылкой с результатом JSON ?? Я не могу загрузить результат jSon! - person Rafa Romero; 04.02.2011

Почему мы не можем просто предоставить информацию о типе контента в JSP? Меня устраивает.

Нам не нужно загружать какой-либо плагин для реализации поддержки JSON для действий struts.

Мы можем просто загрузить любой конвертер 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"/>
person Sanjay Kumar    schedule 14.12.2011

Добавьте return false после вызова функции javascript.

<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

person Siddharth Trikha    schedule 17.12.2013