Page 64 - JavaScript修炼之道
P. 64

任务23  表单验证:高级技巧              53


                   登录名域的HTML代码


                    form/validation_ajax/index.html

                   <p>
                     <label for="user_login">Login*</label>
                     <input type="text" name="user[login]" id="user_login"
                      class="required text" />
                     <span class="feedback" style="display: none;"></span>
                     <img src="spinner.gif" class="spinner" style="display: none;" />
                   </p>

                   监测登录名域

                    form/validation_ajax/validation_ajax.js

                   document.observe('dom:loaded', function checkLogin() {
                     var feedback = $('user_login').next('.feedback'),
                       spinner = $('user_login').next('.spinner');
                     new Field.Observer('user_login', 0.8, function(_, value) {
                       if (value.length < 2) return;
                       feedback.hide(); spinner.show();
                       new Ajax.Request('check_login.php', {
                         method: 'get', parameters: { login: value },
                         onComplete: function(res) {
                           if (Ajax.activeRequestCount > 1) return;
                           if (res.request.success() && res.status) {
                             feedback.update('Login available!').removeClassName('ko');
                           } else {
                             feedback.update('Login taken!').addClassName('ko');
                           }
                           spinner.hide(); feedback.show();
                         },
                       });
                     });
                   });

                   模拟登录名检查

                    form/validation_ajax/check_login.php

                   <?php
                   sleep(rand(5, 10) / 10.0); // 模拟网络间的延迟……
                   $RESERVED = array('bob', 'doudou', 'tdd', 'meshak', 'ook');
                   $login = isset($_GET['login']) ? $_GET['login'] : '';
                   $response = in_array($login, $RESERVED) ? '422 Conflict' : '202 Accepted';
                   header('HTTP/1.1 ' . $response);
                   ?>
   59   60   61   62   63   64   65   66   67   68   69