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>
我正在尝试使用 $.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>