关于全注解SSH异常 ajax 返回值前端无法接收?

    互联网/前端 75次点击 · 1187天前 · 吴良文
WPS演示办公—制作正负极磁铁元素?WPS小技巧—如何在线编辑文档? 吴良文

1条回答我要回复

    小满1187天前

      今天用全注解的SSH 写了一个简单的 关于AJAX的注册页面。自己捣鼓了几个小时才弄出来,现在将他记录下来。
      主要的问题就是 后端的返回值前端无法接收。直接抛出异常。
      主要原因是后端传值的方式出错。现在我给出一个例子<html>
      <head>
      <meta http-equiv="Content-Type" cOntent="text/html; charset=UTF-8">
      <title>Insert title here</title>
      <script type="text/Javascript" src="${pageContext.request.contextPath}/js/jquery-3.3.1.min.js"></script>


      <script>
      $(document).ready(function(){

      $("#form1").submit(function(){
      userName=$("#userName").val();
      userPassword=$("#userPassword").val();
      alert(userName);
      alert(userPassword);
      $.ajax({
      url:"${pageContext.request.contextPath }/Register",
      dataType:"json",
      type:"post",
      data:$("#form1").serialize(),
      success:function(data){
      alert(data.str);
      },
      error:function(){
      alert("ajax有问题!");
      }
      });
      });
      });
      </script>
      </head>
      <body>
      <h1>Hello World From SSH</h1>
      <form id="form1" Onsubmit="return false" action="##" method="post">
      用户名:<s:textfield name="userName" id="userName"/><br/>
      密 码:<s:password name="userPassword" id="userPassword"/><br/>
      <input type="submit" id="submit" value="注册"/>
      </form>
      </body>
      </html>
      这里主要的问题就是那个datatype
      datatype 这里是指后端返回的格式  由于我们需要返回的json的格式,所以需要在这里填上 json
      下面是action的代码:@ParentPackage("json-default")
      @Result(type="json")
      public class RegisterAction extends ActionSupport {

      private static final long serialVersiOnUID= 1L;
      @Autowired
      private UserService userService ;
      //private User user;
      private String userName;
      private String userPassword;
      private String str;
      /*public User getUser() {
      return user;
      }
      public void setUser(User user) {
      this.user = user;
      }*/
      public String getUserName() {
      return userName;
      }
      public void setUserName(String userName) {
      this.userName = userName;
      }
      public String getUserPassword() {
      return userPassword;
      }
      public void setUserPassword(String userPassword) {
      this.userPassword = userPassword;
      }

      @Action(value = "Register", results = { @Result(name ="SUCCESS", type="json")})
      public String Register() {
      User user = new User();
      System.out.println(userName);
      user.setUserName(userName);
      user.setUserPassword(userPassword);
      //HttpServletResponse respOnse= ServletActionContext.getResponse();
      //PrintWriter out = response.getWriter();

      userService.userRegister(user);
      str="你好";
      //out.print("插入成功!");
      //out.print("插入失败!");
      return SUCCESS;
      }
      public String getStr() {
      return str;
      }
      public void setStr(String str) {
      this.str = str;
      }
      主要是这3个注解

      一个是@ParentPackage("json-default") 

      一个是@Result(type="json")

      一个是@Action(value = "Register", results = { @Result(name ="SUCCESS", type="json")})    

      第一个注解是使用json 在struts2中一定要声明 ,相当于<package name="default" extends="json-default">
      //*****

      </package>
      第二个注解,如果没把它放在类前面,即使有第三个注解,那么ajax返回的格式还是

      与js里面的datatype 格式不同。会触发error函数。
      加上之后返回的类型就变成了

      这样就能返回json格式了。
      主要问题就是这些。
      --------------------- 


       

    请先登录后,再回复