如何通过 POST (Ajax) 发送 JSON 数据并从 Struts 2 操作接收 JSON 响应

Posted

技术标签:

【中文标题】如何通过 POST (Ajax) 发送 JSON 数据并从 Struts 2 操作接收 JSON 响应【英文标题】:How to send JSON data via POST (Ajax) and receive JSON response from Struts 2 action 【发布时间】:2013-12-23 14:13:29 【问题描述】:

我试图了解如何使用 JSON,并且在此过程中我试图从 Struts2 操作中获取 JSON 响应并显示响应警报。为此,我在 javascript 中使用 Ajax POST,如下所示:

function checkButtonClick(id)  

        var btnSave = 'saveAttendees';  
            var atNameList = $('#attName'+id).val();
            var ptNameList = $('#postName'+id).val();
            var aId = $('#at_id'+id).val();
            
            alert("here");
            var arr = buttonName:  btnSave,
                    attendeesNameList: atNameList,
                    attendeesPostList: ptNameList,              
                    hidden_At_id: aId
                    ;
            $.ajax(                            
                data: arr,
                type: 'POST',
                dataType: 'json',               
                url:"meeting_record_form",
                
                success:function(result)
                    alert(result.myMsg);
              ,
                error:function(result)
                    alert("error");
              
            );

我的 Action 类包含一个 String 字段,我试图在警报中显示为 JSON 响应。但我发现这样做有问题。我错过了什么或做错了什么?

我的动作类如下:

private String myMsg;

    public String getMyMsg() 
        return myMsg;
    

    public void setMyMsg(String myMsg) 
        this.myMsg = myMsg;
    

private String updateAttendeesRecord() 
        
        
        meetingRecordService.updateAttendeesRecord(attendeesListMethod(), meeting_record);
        setMyMsg("Update Successful!");
            return SUCCESS;
    

struts.xml文件:

 <package name="default" extends="struts-default, json-default">
    <result-types>
      <result-type name="json" class="org.apache.struts2.json.JSONResult" />
    </result-types>
    <interceptors>
      <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor" />
    </interceptors>
    
    <action name="meeting_record_form" class="com.task.action.MeetingRecordAction" method="updateAttendeesRecord">
     <result name="success" type="json" />
    </action>
</package>

我的pom.xml

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-json-plugin</artifactId>
    <version>2.3.15</version>
</dependency>

【问题讨论】:

你能提供一些信息吗? @mic4ael: updateAttendeesRecord() 方法运行成功,数据更新成功,但我收到“错误”警报或“未定义” 也许尝试在您的$.ajax 中添加:async : false @mic4ael: async: false 不起作用 尝试从错误回调中提醒错误信息。 【参考方案1】:

在操作配置中,您不应覆盖 json-default 包中的默认配置,只需扩展它即可。另外json-default 扩展了struts-default,因此不需要多重继承。

<package name="default" extends="json-default">
  <action name="meeting_record_form" class="com.task.action.MeetingRecordAction" method="updateAttendeesRecord">
    <result name="success" type="json" />
  </action>
</package>

【讨论】:

@coding_idiot 感谢您指出 json-default 扩展 struts-default【参考方案2】:

你的 Action 类 MeetingRecordAction 中的问题,方法 updateAttendeesRecord 是私有的,它应该是公共的

public String updateAttendeesRecord() 
    meetingRecordService.updateAttendeesRecord(attendeesListMethod(), meeting_record);
    setMyMsg("Update Successful!");
        return SUCCESS;

【讨论】:

【参考方案3】:

我通过在 json 结果中添加 myMsg 解决了我的问题。感谢大家的帮助

【讨论】:

以上是关于如何通过 POST (Ajax) 发送 JSON 数据并从 Struts 2 操作接收 JSON 响应的主要内容,如果未能解决你的问题,请参考以下文章

通过 POST (ajax) 发送 JSON 数据并从 Controller (MVC) 接收 json 响应

通过 ajax POST json 数据发送一个空数组

如何在ajax post方法中发送json请求

如何在没有 ajax 的情况下发送 POST 请求

通过表单与 jquery/ajax 发送 json

如何使用 $.ajax 发送 JSON 而不是查询字符串?