jQuery为我们提供了更强大的Ajax封装
$.ajax
参数列表
参数名称 | 描述 | 取值 | 示例 |
---|---|---|---|
url | 接口地址 | url:"02.php" | |
type | 请求方式 | get/post | type:"get" |
timeout | 超时时间 | 单位毫秒 | timeout:5000 |
dataType | 服务器返回的格式 | json/xml/text(默认) | dataType:"json" |
data | 发送的请求数据 | 对象 | data:{name:"zs", age:18} |
beforeSend | 调用前的回调函数 | function(){} | beforeSend:function(){ alert(1) } |
success | 成功的回调函数 | function (data) {} | success:function (data) {} |
error | 失败的回调函数 | function (error) {} | error:function(data) {} |
complete | 完成后的回调函数 | function () {} | complete:function () {} |
其他api(了解)
$.post(url, callback, [dataType]);只发送post请求 $.get(url, callback, [dataType]); $.getJSON(url, callback); $.getScript(url,callback);//载入服务器端的js文件 $("div").load(url);//载入一个服务器端的html页面。
使用示例:
$.ajax({ type:"get",//请求类型 url:"02.php",//请求地址 data:{name:"zs", age:18},//请求数据 dataType:"json",//希望接受的数据类型 timeout:5000,//设置超时时间 beforeSend:function () { //alert("发送前调用"); }, success:function (data) { //alert("成功时调用"); console.log(data); }, error:function (error) { //alert("失败时调用"); console.log(error); }, complete:function () { //alert("请求完成时调用"); } });
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>jq-ajax的详细语法格式</title> </head> <body> <button>发送请求</button> <script src="../jquery-1.12.4.min.js"></script> <script> // jq-ajax的详细语法格式 $('button').click(function() { $.ajax({ type: 'get', // 请求方式 url: './jqAajx.php', // 请求地址 // 传递的数据,内部进行转换 name=zs&age=18 data: { name: 'zs' }, // 超时时间,等待服务器响应时间,超过指定时间,自动终止请求 // timeout: 2000, //数据类型,告诉$.ajax返回的数据 以哪种类型进行处理【返回哪种数据类型】, 'text'【字符串】, 'json', 'xml', 'script'【少用】 // 如果设置了dataType: 'json', 插件内部会自动将json数组转成js对象或者数组 dataType: 'json', // 这里,后端返回的是Object数据类型 beforeSend: function() { // 请求发送之前 console.log(111); // 在请求发前,做一些准备工作,判断数据是否合理 }, success: function(info) { //服务器成功响应回调函数 console.log(222); console.log(info); // {name: "大春哥", age: "19", sex: "f"},用于渲染 console.log(info instanceof Object); // true }, error: function() { //请求出错的回调函数 // console.log(333); console.log('请求出错了'); }, complete: function() { // 请求完成的回调函数 // 做一些收尾工作,样式重置 console.log(555); } }) }); </script> </body> </html>
接口化开发
请求地址即所谓的接口,通常我们所说的接口化开发,其实是指一个接口对应一个功能, 并且严格约束了请求参数 和响应结果 的格式,这样前后端在开发过程中,可以减少不必要的讨论, 从而并行开发,可以极大的提升开发效率。
另外一个好处,当网站进行改版后,服务端接口进行调整时,并不影响到前端的功能。
接口化开发概念: 1-前端请求后台 2-后台处理,返回数据 仓库 3-前端渲染 $.ajax({ type: //后台决定 url: //后台决定 data: //后台决定 dataType: //后台决定 }) 项目中,前后配合 依赖接口文档:
注册接口
表单序列化
jquery提供了一个serialize()方法序列化表单,说白就是将表单中带有name属性的所有参数拼成一个格式为name=value&name1=value1这样的字符串。方便我们获取表单的数据。
//serialize将表单参数序列化成一个字符串。必须指定name属性 //name=hucc&pass=123456&repass=123456&mobile=18511249258&code=1234 $('form').serialize();
jquery的ajax方法,data参数能够直接识别表单序列化的数据data:$('form').serialize()
$.post({ url:"register.php", data:$('form').serialize(), dataType:'json', success:function (info) { console.log(info); } });
需求文档
//注册功能 //总需求:点击注册按钮,向服务端发送请求 //需求1:表单校验 //1.1 用户名不能为空,否则提示"请输入用户名" //1.2 密码不能为空,否则提示"请输入密码" //1.3 确认密码必须与密码一直,否则提示"确认密码与密码不一致" //1.4 手机号码不能为空,否则提示"请输入手机号码"; //1.5 手机号码格式必须正确,否则提示"手机号格式错误" //1.6 短信验证码必须是4位的数字,否则提示"验证码格式错误" //需求2:点击注册按钮时,按钮显示为"注册中...",并且不能重复提交请求 //需求3:根据不同响应结果,处理响应 //3.1显示注册结果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>表单注册</title> <style> body { margin: 0; padding: 0; background-color: #F7F7F7; } ul { margin: 0; padding: 50px; list-style: none; } .register { width: 800px; margin: 50px auto; background-color: #FFF; border: 1px solid #CCC; border-radius: 5px; } li { display: flex; margin: 20px 0; } label, input { display: block; float: left; height: 46px; font-size: 24px; box-sizing: border-box; color: #333; } label { width: 200px; line-height: 46px; margin-right: 30px; text-align: right; } input { width: 320px; padding: 8px; line-height: 1; outline: none; position: relative; } input.code { width: 120px; } input.verify { width: 190px; margin-left: 10px; } input.disabled { background-color: #CCC !important; } input[type=button] { border: none; color: #FFF; background-color: #E64145; border-radius: 4px; cursor: pointer; } .tips { position: fixed; top: 0; width: 100%; height: 40px; text-align: center; } .tips p { min-width: 300px; max-width: 400px; line-height: 40px; margin: 0 auto; color: #FFF; display: none; background-color: #C91623; } input.gray { background-color: #ccc; } </style> </head> <body> <div class="register"> <form id="ajaxForm"> <ul> <li> <label for="">用户名</label> <input type="text" name="name" class="name"> </li> <li> <label for="">请设置密码</label> <input type="password" name="pass" class="pass"> </li> <li> <label for="">请确认密码</label> <input type="password" name="repass" class="repass"> </li> <li> <label for="">验证手机</label> <input type="text" name="mobile" class="mobile"> </li> <li> <label for="">短信验证码</label> <input type="text" name="code" class="code"> <input type="button" value="获取验证码" class="verify"> </li> <li> <label for=""></label> <input type="button" class="btn" value="立即注册"> </li> </ul> </form> </div> <!-- 提示信息 --> <div class="tips"> <p>aaa</p> </div> <script src="../../jquery-1.12.4.min.js"></script> <script> // 1-点击注册按钮,获取表单数据 // 2-验证表单数据是否合理,在数据合理情况,先后台发送请求进行注册 // 3-监听服务器响应, 获取注册结果,并显示 $('.btn').click(function () { // var regTel = /^1\d{10}$/; // console.log(regTel.test('22312312312')); //获取表单数据 // var name = $('.name').val(); // var pass = $('.pass').val(); // var repass = $('.repass').val(); // ... // 后台需要什么数据格式: // name=zs&age=18&sex=m // 上面的变量还需要进行拼接!! // jquery提供的表单序列化 (格式化) // name=zs&pass=123&repass=123&mobile=123&code=123 // 原理:获取表单name属性和value属性进行拼接 var formData = $('#ajaxForm').serialize(); // console.log(formData); //$.ajax终止ajax请求 return false; //先把$.ajax框架写出 $.ajax({ type: 'post', url:'./register.php', data: formData, //也可以直接传递name=zs&age=18字符串 timeout: 10000, //超时, dataType: 'json', //把返回数据以何种类型进行处理 beforeSend: function () { //请求发送之前,做数据验证,如果数据不合理,程序到此结束 //1-验证用户名 if ($('.name').val().trim().length == 0) { //显示提示信息 $('.tips p').fadeIn(500) .delay(1000) //让动画暂停 .fadeOut(500) .text('亲,用户名不能为空哦!'); // 终止请求 【只写return不能终止ajax请求,要写return false,这是ajax中的固定写法】 return false; } //2-验证密码 if ($('.pass').val().length < 6) { //显示提示信息 $('.tips p').fadeIn(500) .delay(1000) //让动画暂停 .fadeOut(500) .text('亲,密码长度不能小于6位哦!'); //终止请求 return false; } // //3-验证密码是否一致 // if ($('.pass').val() != $('.repass').val()) { // //显示提示信息 // $('.tips p').fadeIn(500) // .delay(1000) //让动画暂停 // .fadeOut(500) // .text('亲,两次密码不一样哟!'); // //终止请求 // return false; // } // //验证手机号: // // 规则: 1开头,后面跟10个数字 // var regTel = /^1\d{10}$/; // //4-验证手机号 // if ( !regTel.test( $('.mobile').val() ) ) { // //显示提示信息 // $('.tips p').fadeIn(500) // .delay(1000) //让动画暂停 // .fadeOut(500) // .text('亲,手机必须是1开头的11位数字呀!'); // //终止请求 // return false; // } // //5-验证验证码的长度是否4为 // if ( $('.code').val().length != 4 ) { // //显示提示信息 // $('.tips p').fadeIn(500) // .delay(1000) //让动画暂停 // .fadeOut(500) // .text('亲,验证码格式有误哦!'); // //终止请求 // return false; // } // 程序执行到此,说明以上所有验证都通过了,马上可以发送请求了 // 改变按钮的颜色和文字,给用户提示,请求正在发送,不要着急... // 禁用按钮,防止用户重复提交 // disabled checked selected 用 prop(); $('.btn').addClass('gray').val('正在注册...').prop('disabled', true); }, success:function (info) { //注册成功,显示注册结果 console.log(info); if (info.code == 200) { alert(info.msg); } }, error: function () { console.log('请求出错了'); }, complete: function () { //请求完成后,清空表单 // 把按钮取消禁用,去掉类名,设置颜色(复位) $('.btn').removeClass('gray').val('立即注册').prop('disabled', false); } }) }); </script> </body> </html>
<?php // echo '<pre>'; // print_r($_POST); // echo '</pre>'; //服务器 获取前端数据,判断数据是否合理, // 如果合理,注册成功,添加到数据库 // 如果用户名不为空就注册成功 $info = []; if (!empty($_POST['name'])) { //注册成功 $info = [ "code" => 200, "msg" => "注册成功" ]; } else { //注册失败 $info = [ "code" => 100, "msg" => "注册失败" ]; } echo json_encode($info); // sleep(3); ?>