如何使用 $.getJSON() 方法从操作类获取 String 值?

问题描述 投票:0回答:4

我正在尝试使用

String
方法从操作类中获取
$.getJSON()
值,但我得到的结果为
undefined
。这是我尝试过的代码片段

脚本:

$(function() {
        $("#newPostionFormID").submit(
                function() {
                    var formInput = $(this).serialize();
                    $.getJSON('../employeeShifts/addnewposition.action',
                            formInput, function(jsonResponse) {
                                console.log(jsonResponse.positionAdded);
                            });
                    return false;
                });
    });

strus.xml:

<package name="employeeShifts" namespace="/employeeShifts"
                extends="struts-default,json-default">
     <action name="addnewposition" 
        class="com.vgt.intranet.employeeshifts.action.EmployeeShiftAction"
                    method="addNewPosition">
                    <result type="json">
                        <!-- <param name="excludeNullProperties">true</param>
                        <param name="noCache">true</param>
                        <param name="root">positionAdded</param> -->
                    </result>
        </action>
   </package>

动作类:

public class EmployeeShiftAction extends ActionSupport {
private String position;
private String positionAdded;

public String addNewPosition() {
    log.info("inside addNewPosition");
    position = this.getPosition();
    log.info("Position: " + position);
    positionAdded = position;
    log.info("positionAdded: " + positionAdded);
    return Action.SUCCESS;
}

public String getPosition() {
    return position;
}

public void setPosition(String position) {
    this.position = position;
}

public String getPositionAdded() {
    return positionAdded;
}

public void setPositionAdded(String positionAdded) {
    this.positionAdded = positionAdded;
}

控制台日志:

未定义

我不知道我哪里错了?任何帮助表示赞赏。

java jquery ajax json struts2
4个回答
1
投票

您可以使用 inlcude params 定义多个对象作为输出参数。 默认情况下,有时 JSON 调用会自动调用该控制器中的所有函数/方法,这些函数/方法的方法名称以“get”开头。所以请确保不会发生这种情况。

<result type="json">
<param name="excludeNullProperties">true</param>
     <param name="ignoreHierarchy">false</param>
     <param name="includeProperties">list1.*,list2.*,string</param>
</result>

1
投票

在控制台日志中,您打印

jsonResponse.positionAdded
,但操作返回的 JSON 中没有属性
positionAdded
。要访问此属性,您应该返回 JSON 结果

<result type="json">
    <!-- <param name="excludeNullProperties">true</param> -->
    <param name="noCache">true</param>
</result> 

0
投票

您应该在 json 的操作类中进行编码。您应该将 json 数据返回给客户端。在我的情况下,我使用了 GSON,它是一个 java 库,可用于将 Java 对象转换为其 JSON 表示形式。GSON( https://code.google.com/p/google-gson/)看看这里。在从操作类返回 json 数据之前,您无法在客户端检索 json 数据。尝试将positionAdded 转换为来自操作类的 JSON 数据。

我建议你的客户端使用这个脚本:

 jQuery.ajax(
                        {
                            type: 'POST',
                            url:'../employeeShifts/addnewposition.action',,
                            dataType: 'json',
                            success:function(data){
                                var dat=data.positionAdded
                                //alert(dat);
                                var obj = jQuery.parseJSON(dat);

                                            alert(obj);

                },
                            error:function(data1,data2,data3){
                                //alert("error");

                                alert(data3);
                            }



                    });

0
投票

谢谢大家。在这里,我发布了最终的工作 struts 配置作为您的回复的答案。

<result type="json">
    <param name="root">action</param>
    <param name="includeProperties">positionAdded</param>
    <param name="excludeNullProperties">true</param>
    <param name="noCache">true</param>
</result>
© www.soinside.com 2019 - 2024. All rights reserved.