Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Rafa RomeroОтветов: 3

У меня есть 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>

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

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

google-mapsjsonjqueryajaxstruts2

Ответы

Ответ 1 · рейтинг 2 · vmg

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

Ответ 2 · Sanjay Kumar

Почему мы не можем просто предоставить информацию о типе контента в 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"/>

Ответ 3 · Siddharth Trikha

Добавьте 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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы