• 20 SSM——Ajax的使用


    引入

    在AJAX技术之前,我们使用请求转发或是重定向来不断获取数据,这两种方式都是页面请求(每次请求获取一整个页面),它消耗的资源高。

    现在我们使用ajax,ajax技术是正文请求,只更改网页的部分数据而不重新请求一个新的页面,可以使客户端效率更高。

    json

    我们将服务器需要返回给客服端的数据封装为json对象,便于传输。

    一个json对象的格式如下:

    json对象中可以包含字符串对象、数组对象、json对象。

    {
      “name”:“张三”,
      “skills”:["篮球","游泳"],
      "department":{
      "id""1",
      "name":"人事部"  
    }    
    }
    

      

    配置

    引入jar包

    maven项目中,在pom.xml文件中添加依赖坐标。此依赖用来对非基础数据类型的数据进行格式转化,在使用springmvc的方式返回对象后,会将返回的对象通过此jar包转化为json对象。

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.10.1</version>
    </dependency>
    

      

    引入驱动

    需要配置驱动才可使用上面的jar包,只需在springMVC的配置文件中添加下面的代码即可。

    <!-- 注解驱动:加了它就能解析json -->
    <mvc:annotation-driven></mvc:annotation-driven>
    

      

    使用

    举个例子,我们验证一个登录网页传来的账号密码是否正确。

    在Controller中:

    @RequestMapping("login.do")
    @ResponseBody
    public JsonResult login(String username,String password) {
    		JsonResult jr = new JsonResult();
    		if("root".equals(username)) {
    			if("1234".equals(password)) {
    				jr.setState(3);//登陆成功
    			}else {
    				jr.setState(2);//密码不正确
    			}
    		}else {
    			jr.setState(1);//用户不存在
    		}
    		return jr;
    }
    

      

      其中的JsonResult是我们自定的一个类,用来封装返回的数据,由于它是非基础数据类型的数据,所以它将通过Jackson-databind.jar转化为json数据返回给客户端。

    JsonResult类。

    public class JsonResult {
    	private Integer state;
    
    	public Integer getState() {
    		return state;
    	}
    
    	public void setState(Integer state) {
    		this.state = state;
    	}
    	
    }
    

      

    由于添加了@ResponseBody注解,在不使用ajax接收的情况下,我们将看到类似这样的返回页面:

    可以看到java对象转为了json对象

    使用AJAX

    接下来,我们就使用ajax接收返回的数据。

    • 首先,我们先引用jQuery。
    • 再对登录页面的登录按钮设置login()方法(登录按钮的type属性改为button),用于ajax的示范。
    • 然后使用$.ajax()进行请求与响应的数据接收和处理

    下面的$.ajax({..})即ajax的常规固定写法,包含常用的五个参数:

    • url:本次请求的url
    • type:相当于form标签的method,取值:post,get
    • date:向服务器发送的数据,键值对之间使用&拼接,我们可以使用form表单的id来调取各值自动拼接,假设form的id为from-id,则这里可写为:"data":$("#form-id").serialize()
    • dateType:返回数据类型,非常重要。相当于content-Type,一般取值有html、text(返回文本)、json(返回json对象)等
    • success:值为一个回调函数,只有当响应200状态码也就是成功时,才回执行回调函数。该函数的参数为服务器返回的数据对象,参数名可自定义。

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="jquery-2.1.3.min.js"></script>
    <script type="text/javascript">
    	function login(){
    		let username = $("#username").val();
    		let password = $("#password").val();
    		$.ajax({
    			"url":"login.do",
    			"type":"post",
    			"data":"username="+username+"&password="+password,//推荐:“data”:$("#form-id").serialize(),但标签的name值需要与接收的对象属性保持一致
    			"dataType":"json",
    			"success":function(result){//这里的result对象即为刚才的JsonResult被转为Json后的对象。
    				if(result.state==1){
    					alert("用户不存在");
    				}else if(result.state==2){
    					alert("密码错误");
    				}else{
    					alert("登陆成功");
    				}
    			}
    			
    		})
    	}
    </script>
    </head>
    <body>
    	<form id="form-id" action="login.do" method="post">
    		<table>
    			<tr>
    				<td>用户名:</td>
    				<td><input type="text" id="username" name="username"></td>
    			</tr>
    			<tr>
    				<td>密码:</td>
    				<td><input type="text" id="password" name="password"></td>
    			</tr>
    			<tr>
    				<td><input type="button" value="登录"  onclick="login()"/></td>
    			</tr>
    		</table>
    	</form>
    </body>
    </html>
    

      

    演示

     

  • 相关阅读:
    bigint int smallint tinyint 我是个马大哈
    [转载]Jquery主要控件的取值、赋值,包括textbox,butt
    几个时间转化格式
    Linq 事务问题
    手机网页开发
    PM2.5口罩网上热销 防护作用有限“噱头”多
    按F5键刷新造成的数据重复提交
    Ajax中遇到的一点细节问题
    WCF(二)将WCF发布到WindowsService
    WCF(一)
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/12511920.html
Copyright © 2020-2023  润新知