【问题标题】:How to get data from struts2 action with jQuery?如何使用 jQuery 从 struts2 动作中获取数据?
【发布时间】:2011-06-19 22:44:05
【问题描述】:

我有一个带有 GoogleMaps 的 Struts2 Web。我想加载保存在 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;
}

我想在 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) {到最后,是创建de标记的JavaScript代码,这个没关系。问题出在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 请求和响应的详细信息。
  • 同意上述观点,根据您的代码,您应该能够将浏览器指向“/test/LoadMarkers”并获得一个json页面/文件,如果您不这样做,那么没有多少JS会帮忙的。我说页面/文件是因为 FF 一般会生成一个文件来保存,而 Chome 会显示一个 json 页面。
  • 哦!!!现在我遇到了这个问题!在 Google Chrome 中我可以显示 de Json 文件,在 IE 中我可以下载它,但我不想要这个!我想使用包含 json 的数据来创建标记!我该怎么做?我不明白你想说什么“你应该能够将你的浏览器指向 /test/LoadMarkers.... "

标签: jquery ajax json google-maps struts2


【解决方案1】:

你有没有考虑用Struts2-jQuery plugin 用Struts2 真的简化了ajax 开发,我自己用过

【讨论】:

  • 是的,我考虑过使用 Struts2-jQuery 插件,但我不知道如何处理我使用 Struts2-jQuery 插件标签显示的所有代码...
  • 使用 Struts2-jQuery-plugin 你可以使用库标签,例如
    ...你看到了吗?
  • 这是 struts2-jQuery 插件weinfreund.de/struts2-jquery-showcase/index.action 的展示。您可以从该资源下载所有源。从我的经验中我可以看出:在 4 天内,我学会了如何使用插件,并用 6 个操作重写了我的应用程序,无需刷新页面即可工作 :) 所以,值得研究一下
  • 谢谢你这么配!那个网络太棒了!但是你能帮我解决“带有 JSON 结果的远程链接”吗?我无法加载 de json 结果!
【解决方案2】:

为什么我们不能只在 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"/>

【讨论】:

    【解决方案3】:

    在 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 2014-08-25
      • 2014-07-15
      • 2023-02-20
      • 1970-01-01
      相关资源
      最近更新 更多