Struts2 json 使用 $.getJSON 的响应结果未定义的响应

Struts2 json response using $.getJSON results undefined response

我正在尝试使用 $.getJSON 方法从操作 class 中获取 String 值,但我得到的结果是 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>

动作class:

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

控制台日志:

undefined

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

在控制台日志中您打印了 jsonResponse.positionAdded,但是您在 JSON return 中没有 属性 positionAdded 操作.要访问这个 属性 你应该 return JSON 结果

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

你应该在你的操作中编码 class 以便 json.You 应该 return 将 json 数据返回给客户端 side.In 我的情况我已经使用了 GSON 它是一个java库,可以用来将Java对象转换成它们的JSONrepresentation.GSON(https://code.google.com/p/google-gson/)看看here.You检索不到json 数据在您的客户端,直到您从您的操作 return 返回 json 数据 class.Try 以将 positionAdded 转换为来自您的操作的 JSON 数据 class.

我建议您的客户端,这个脚本:

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



                    });

您可以使用 inlcude params 将多个对象定义为 out 参数。 默认情况下,有时 JSON 调用会自动调用该控制器中的所有 funtions/methods,它们的方法名称以 'get' 开头。因此请确保不会发生这种情况。

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

谢谢大家。在这里,我发布了最终的工作 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>