Ajax核心对象——快速上手XmlHttpRequest

引言:

   非TGB的,直接跳过吧……

   从开学结束JQuery之后,计算机的进度停了一段时间。某天无聊的时候,又重新把BS的东西拿过来看了看。发现里面有很多既熟悉又陌生的东西。

   在学习王兴魁老师的Ajax的时候,里面的东西,大多都是之前学过的。在学习JS的时候,有很多js资料。很多人看的都是牛腩js和姜浩的js。但是我师父让我看李炎恢的js。刚开始的时候感觉挺怪的。牛腩的js一周,姜浩的js 一周。李炎恢的js 150据说至少看三个星期。

   虽然感觉压力大了点。但是等真正看的时候,才发现这150集的内容挺有用的。前面讲解的非常基础。后面通过一个项目,讲解了JQuery是如何从js封装过来的。以及Ajax的入门技术。

   在看Ajax的时候,发现基本里面全是学过的东西。现在来学习一下Ajax的基础。并看一个实例。

 

Ajax基础:

 

上面啰嗦了半天,现在进入正题。

 

什么是Ajax

     Ajax缩写:AsynchronousJavaScript and XML 也就是 异步的 jsxml

   利用Ajax可以在向服务器请求数据的时候,客户端不进行刷新。

 

   就是客户端与服务器的交互,可以不间断的进行。

   即:客户端发送的请求,不影响客户端的使用。

 

同步与异步的区别?

同步:

   客户端向服务器请求一个数据,页面重新加载(刷新)。

异步:

   客户端请求数据。页面上直接得到而不需要刷新

 

   Ajax技术,可以使得web页面更加友好。不会因为操作一小块的内容,使得整个页面进行刷新。

   Ajax的核心技术,就是XmlHttpRequest对象(简称XHR)。这个对象的作用,就相当于,客户端的秘书。

 

传统的页面设计:

   

   当请求数据的时候,需要等待服务器传回数据之后才能进行下一步操作。(可能造成无响应的状态)

 

Ajax方式的页面:

   

   客户端发送请求数据的操作之后,仍然可以继续使用。(不会刷新页面)比如,百度的搜索框。不会因为你填写了内容 而停止响应。

 

XmlHttpRequest对象,作为客户端的“秘书”与服务器进行交互。

 

传统Web页面与Ajax方式Web页面的对比

   

 

Ajax入门:五步学会XmlHttpRequest

    html页面:

 

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <script type="text/javascript">                
                var xmlhttp;
                function submit() {
                    //此处省略1-4步骤
                }
                function callback() {
                    //此处省略5步骤  
                }
            </script>
    </head>
    <body>       
        <div>用户名:</div>
        <input type="text" id="userName"/>
        <input type="button" οnclick="submit()" value="校验" />
        <br />
        <div id="message"></div>
    </body>
</html>


下面是五步流程:

1、创建XmlHttpRequest对象

 //1.创建xmlHttpRequest对象
                    if (window.XMLHttpRequest) {
                        //IE7,IE8,FireFox,Mozillar,Safari,Opera
                        //alert("IE7,IE8,FireFox,Mozillar,Safari,Opera");
                        xmlhttp = new XMLHttpRequest();
                        if (xmlhttp.overrideMimeType) {
                            xmlhttp.overrideMimeType("text/xml");
                        }
                    } else if (window.ActiveXObject) {
                        //IE6,IE5.5,IE5
                        var activeName = ["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Miscrosoft.XMLHTTP"];
                        for (var i = 0; i < activeName.length; i++) {
                            try {
                                xmlhttp = new ActiveXObject(activeName[i]);
                                break;
                            } catch (e) {

                            }

                        }
                    }
                    if (xmlhttp === undefined || xmlhttp === null) {
                        alert("当前浏览器不支持创建xmlhttprequest对象,请更换浏览器");
                        return;
                    }

2、注册回调函数

                    //2.注册回调方法
                    xmlhttp.onreadystatechange = callback;

    注:在注册回调函数的时候,只需要把函数名赋值即可。如果 赋值callback().则赋值为 函数执行的结果值。

3、设置与服务器交互的参数

                    //3.设置和服务器交互的相应参数(Get)
                    var userName=document.getElementById("userName").value;
                        xmlhttp.open("GET", "Ajax?name=" + userName, true); //true 表示异步的方式
                    //3.设置和服务器交互的相应参数(Post)
                    //xmlhttp.open("POST","AJAX",true); 
                    //xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");                     
                    

4、向服务器发送数据

                    //4.设置向服务器发送的数据,启动和服务器端的交互
                        xmlhttp.send(null);

 

5、判断与服务器交互是否完成,并判断是否有返回数据

                        //5.判断服务器端的交互是否完成,还要判断服务器端是否返回了数据
                        if (xmlhttp.readyState === 4) {
                            //表示和服务器端的交互已经完成            
                            if (xmlhttp.status === 200) {
                                //表示服务器的响应代码是200,正确的返回了数据
                                //纯文本接受数据方式
                                var message = xmlhttp.responseText;
                                //xml数据对应的dom对象的接受方法
                                //使用的前提是,服务器端需要设置content-type为text/xml
                                //var domXml=xmlhttp.responseXML

                                var messageNode = document.getElementById("message");
                                messageNode.innerHTML = message;

                            }
                        }

注:理解困难的,可以去研究一下xmlhttprequest对象的属性及事件。


仅仅有以上的html,运行结果肯定有问题…… 运行都没有Web服务器。单纯html客户跟谁交互?

 

此时,应该创建Web服务器。使用tomcat服务器创建servlet

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author 赵崇
 */
public class Ajax extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */
            String old=request.getParameter("name");
            if(old==null){
                    out.println("用户名不能为空");
            }else{
                String name=new String(old.getBytes("ISO8859-1"),"gb2312");
                System.out.println(name);
                if(name.equals("zhaochong")){
                        out.println("用户名["+ name+"]已经存在,请使用其他用户名");
                }else{
                        out.println("用户名["+ name+"]尚未存在,请使用其他用户名");
                }
            }
        }
    }


在创建servlet的时候,只需要修改processRequest函数中的内容。创建servlet的时候,请自动生成xml

   

 

   以上Demo是在NetBean IDE上进行的。虽然这么一个小例子,发现里面有好多都不懂……比如tomcat与glashfish的区别 以及xml文件中内容的含义等等。看视频的时候,眼看偏了,忽略了 开发环境的配置。

 

总结

   通过以上一个小例子,可以初步了解一下Ajax与传统页面的区别。更加深入的理解,需要在多次重复,在项目中应用,才能熟练掌握。


 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 32
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值