使用javascirpt实现原生的ajax

 前边说了ajax的概念以及ajax里面最重要的XMLHttpRequest对象,这次我们来看看如何使用javascript来实现ajax,并向服务器后台发送get和post类型的请求。例子效果如下:

GIF.gif

    这个例子很小,但ajax的特性却从中一览无遗:

1.ajax是异步的,一个请求的执行完成与否并不影响另一个请求的发送,这大大改善了网页程序的用户体验

2.ajax是局部刷新的,一个ajax请求可以只影响整个网页中的一小部分,而不是刷新整个网页。

那我们就来看一下,这个例子是怎么实现的吧,新建ajaxTest.html:

1

2

3

4

5

6

7

8

9

10

11

12

13

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>ajaxTest</title>

</head>

<body>

    <div><span id="get">显示get方式得到的内容</span></div>

    <input id="getBtn" type="button" value="get方式">

    <div><span id="post">显示post方式得到的内容</span></div>

    <input id="postBtn" type="button" value="post方式">

</body>

</html>

 javascript实现原生的ajax代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

<script>

    window.onload=function(){

        document.getElementById("getBtn").onclick=function(){

            var xmlhttp;

            if (window.XMLHttpRequest){//code for IE7+, Firefox, Chrome, Opera, Safari

              xmlhttp=new XMLHttpRequest();

            }else{// code for IE6, IE5

              xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

            }

            xmlhttp.onreadystatechange=function(){

              if (xmlhttp.readyState==4 && xmlhttp.status==200){

                document.getElementById("get").innerHTML=xmlhttp.responseText;

              }

            }

            xmlhttp.open("GET","/testAjax/ajaxTestServlet?flag=get&uname=zdw",true);

            xmlhttp.send();

            document.getElementById("get").innerHTML="<img src='/testAjax/imgs/loading.gif' width='24px'>";

        }

        document.getElementById("postBtn").onclick=function(){

            var xmlhttp;

            if (window.XMLHttpRequest){//code for IE7+, Firefox, Chrome, Opera, Safari

              xmlhttp=new XMLHttpRequest();

            }else{// code for IE6, IE5

              xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

            }

            xmlhttp.onreadystatechange=function(){

              if (xmlhttp.readyState==4 && xmlhttp.status==200){

                document.getElementById("post").innerHTML=xmlhttp.responseText;

              }

            }

            xmlhttp.open("POST","/testAjax/ajaxTestServlet?flag=post",true);

            xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

            xmlhttp.send("pwd=zdw&uname=zdw");

        }

    }

</script>

后台的java代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

@Override

    protected void doPost(HttpServletRequest req, HttpServletResponse resp)

            throws ServletException, IOException {

        req.setCharacterEncoding("utf-8");

        resp.setContentType("text/html;charset=utf-8");

        String flag = req.getParameter("flag");

        PrintWriter writer = resp.getWriter();

        if ("get".equals(flag)) {

            try {

                Thread.sleep(5000);

            catch (InterruptedException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

            String uname = req.getParameter("uname");

            writer.write("用户名"+uname+"已存在");

        }else if ("post".equals(flag)) {

            String pwd = req.getParameter("pwd");

            writer.write("密码"+pwd+"不正确");

        }

    }

代码释疑:

结合上一篇介绍XMLHttpRequest对象的教程,上边的javascript代码也是很好理解的,我这里说说需要注意的地方吧,再啰嗦一下:

    1.XMLHttpRequest的获取注意兼容ie的写法别忘记了,不然程序不健壮

    2.XMLHttpRequest对象发送post请求的时候,要设置请求头application/x-www-form-urlencoded

    3.XMLHttpRequest对象发送get请求时,请求参数直接附加在请求地址后边即可,post的时候放在send()函数里面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值