JS异步操作之promise发送短信验证码.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" /> <title></title> <link rel="stylesheet" href="https://qidian.gtimg.com/lulu/theme/peak/css/common/ui/LightTip.css"> </head> <body> <h1 align="center">短信验证码测试</h1> <img id="img" style="display: none;" /> 帐号: <input type="text" placeholder="请输入手机号码或邮箱帐号..." id="code" /> <button onclick="setInviteCode()">获取验证码</button> <p id="isST" style="display: none;"> 获取状态:<span id="isTF"></span> </p> </body> <script src="https://google-api.ac.cn/cdn/jquery/3.3.1/jquery.min.js"></script> <script src="https://qidian.gtimg.com/lulu/theme/peak/js/common/ui/LightTip.js"></script> <script> // 此后台服务器限制,必须失败一次才能请求【可以删除】 $("#img").attr("src", "http://192.168.0.111/platform/user/getValidateCodeImg.m?t=" + Math.random()); let first = true; function setInviteCode() { let code = $("#code").val().trim(); let body = { "type": 0, "mobile": code } if(first) { first = false; // 创建 promise 操作 let promise = new Promise(function(resolve, reject) { // 进行一些异步或耗时操作 if(!first) { $.ajax({ type: "POST", url: "http://192.168.0.111/platform/user/getValidateCode.m?t=" + Math.random(), xhrFields: { withCredentials: true }, crossDomain: true, data: body, success: function(data) { resolve(data); } }); } else { // 系统级别的错误 reject(Error("失败!")); } }); // 绑定 promise 处理程序 promise.then(function(result) { // 防止重复点击【无论成功与失败】 first = true; $("#isST").css("display", "block"); if(result.statusCode == 0) { // 成功提示 $.lightTip.success('短信发送成功!'); // 成功的其他操作 $("#isTF").text('短信发送成功!'); $("#isTF").css("color", "green"); } else { // 失败提示 $.lightTip.error(result.resultDesc); // 失败的其他操作 $("#isTF").text(result.resultDesc); $("#isTF").css("color", "red"); } }, function(err) { alert(err); }); } } </script> </html>
我们有两个方法来进行软件设计:一个是让其足够的简单以至于让BUG无法藏身;另一个就是让其足够的复杂,让人找不到BUG。前者更难一些。