zoukankan      html  css  js  c++  java
  • 通过一个例子了解Ajax

    Ajax指的Asyncronous JavaScript and XML

    Ajax并不是什么新的编程语言, 它是现有一些东西的应用.从它的名称中就可以看出来

    假如我们设想, 浏览器展示了一个页面,但需要更新其中小部分信息,这些信息依赖用户输入,又需要和服务器交互, 因为要和服务器交互, 但是其实还是在这个页面(url), 所以再重新加载整个HTML其实很浪费, 所以出现了Ajax 

     Ajax就是在JavaScript中, 后台做Http请求, 可以是异步的也可以是同步的, 然后动态更新显示页面. 当然这个过程我们感觉不太到,因为地址栏并不会有任何变化.

    Ajax涉及的东西:

    • JavaScript
    • HTTP

    其实就只有这两个

    再具体一点:

    • XMLHttpRequest (是JavaScript Object), 后台发送HTTP请求
    • JavaScript DOM , 修改HTML来展示信息
    • HTTP请求和服务器交互

    一个例子 

    比如一个常用的Ajax用途是在注册的时候校验邮箱是否被注册,或用户名是否已存在,用户不用等到整个form都填写完提交才知道是否是已被注册.

    <form action=" " method="post">
    <input type="text"  id="email_register"  name="email"  onblur="check_email(this.value)" />
    </form>

    比如这样一个页面, 有一个<form>, 我们再输入邮箱后, 它就会去校验这个邮箱是否被注册了

    给<input>绑定一个blur事件, 失去焦点的时候触发

    check_email函数:

    function check_email(email){
        ajax_request = new XMLHttpRequest();
        ajax_request.onreadystatechange=function(){
             if (ajax_request.readyState==4 && ajax_request.status==200){
                  var result = eval(ajax_request.responseText);
                      if (result.status == 'False'){
                            alert("email registered");
                      }
             }
          }
     
        ajax_request.open("GET", '192.168.12.192:8088/accounts/apiValidRegAddress?type=email&address=' + email, true);
        ajax_request.send();
    }

    可以看到用javascript做一个Ajax请求的接口,流程

    • 初始化一个XMLHttpRequest对象 ajax_request.
    • 给ajax_request写一个readystatechange函数,  每次其readyState改变的时候会被调用
    • open()
    • send() 

    GET请求的send()不带参数, 对于POST请求,要发送的数据放在send()的参数中, 如果上面使用POST

    ajax_request.send(type="email",  address=email);

    注意到我们这行语句:

    if (ajax_request.readyState==4 && ajax_request.status==200)

    XMLHttpRequest的readyState可以取值0~4, 记录当前请求所处的阶段

    • 0: request not initialized 
    • 1: server connection established
    • 2: request received 
    • 3: processing request 
    • 4: request finished and response is ready

    当readyState为4, 也就是收到服务器回应时, 服务器当然是做了一个HTTP应答, status记录服务器HTTP应答状态码, 比如

    • 200  OK
    • 404  页面缺失

    [学习] : XMLHttpRequest是JavaScript的一个类,它也是一个标准, 更多的学习, 参考XMLHttpRequest的API

    上面例子页面的完整代码

    <html>
    <head>
    <script>
            function checkEmail(email){
                    var mailPattern = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
                    if (!mailPattern.test(email)){
                            alert("invaid email : " + email);
                    } else {
                            ajax_request = new XMLHttpRequest();
                            ajax_request.onreadystatechange=function(){
                                            if (ajax_request.readyState==4 && ajax_request.status==200){
                                                    var result = eval("("+ajax_request.responseText+")");
                                                    if (result.status == false){
                                                            alert("email registered");
                                          }
                                            }
                                    }
                            ajax_request.open("GET", '/accounts/apiValidRegAddress?type=email&address=' + email, true);
                            ajax_request.send();
    
                    }
            }
    </script>
    </head>
    
    <input type="text" onblur="checkEmail(this.value)"/>
    </html>

    在checkEmail()中做了一个邮箱地址是否合法的正则检查

    我在自己的Django项目中,加入了这个页面这个页面来测试, 上面那个Ajax接口是我们已经实现了的,检查用户输入的手机或邮箱是否被注册了.

    页面截图:

    JQuery的Ajax

    jquery有一系列和Ajax相关的函数,其中最主要的是  jquery.ajax()

    语法

    • jquery.ajax([setting])

    setting就是一系列的参数,比如

    • type    'GET' or 'POST'
    • url       请求的url
    • data    传递到服务器的数据, key/value的形式
    • sucess  请请求成功的回调函数, 参数是整个ajax调用返回的数据, 并且已经根据 dataType转成了相应的类型
    • dataType    预计的调用返回数据的类型, 如 'json'

    比如上面的例子,用ajax来写就是

    1 jquery.ajax(type='GET', 
    2             url = '/accounts/apiValidRegAddress', 
    3             data={'type':'email', 'address': email},
    4             dataType='json',
    5             sucess = function(result){
    6             if (result.status == false){
    7                   alert('email registered');
    8             }
    9 })

    --------------------------

    参考:

    w3cshools的教程

    http://www.w3schools.com/ajax/

    mozilla development network

    http://mdn.beonex.com/en/AJAX.html

  • 相关阅读:
    Effective C++ 1.让自己习惯C++
    C++Primer 第十九章
    C++Primer 第十八章
    C++Primer 第十七章
    C++Primer 第十六章
    C++Primer 第十五章
    C++Primer 第十四章
    ~~在python中踩过的坑以及问题~~(不断更新)
    ~~Python解释器安装教程及环境变量配置~~
    ~~Py2&Py3~~
  • 原文地址:https://www.cnblogs.com/livingintruth/p/3518698.html
Copyright © 2011-2022 走看看