加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ajax

发布时间:2020-12-16 02:59:07 所属栏目:百科 来源:网络整理
导读:一、ajax 流程原理 ajax,即在不重新加载整个网页的情况下,对网页的某部分进行更新。 下面演示ajax 的实现原理 配置: cd ajax 参考:http://www.expressjs.com.cn/starter/generator.html express --view=ejs myappcd myappnpm install 完整的ajax流程: 1

一、ajax 流程原理

  • ajax,即在不重新加载整个网页的情况下,对网页的某部分进行更新。

下面演示ajax 的实现原理

配置:

cd ajax

参考:http://www.expressjs.com.cn/starter/generator.html

express --view=ejs myapp
cd myapp
npm install

完整的ajax流程:

1、 创建XMLHttpRequest对象

var xhr = new XMLHttpRequest();

2、准备发送

xhr.open('get','./01check.js?username='+uname+'&password='+pw,true);

?

3、执行发送动作

xhr.send(null);

?

4、监听response 回调函数

onreadystatechange 事件:每当 readyState 改变时,就会触发 onreadystatechange 事件。

?

index.js 路由

......
router.get('/api/one',(req,res,next)=>{
  res.json({
      status:200,result:'this is one.....'
  })
});


/* GET home page. */
router.get('/one',function(req,next) {
  res.render('index1',{ title: 'Express' });
})
...........

index.ejs:

<body>
<button id="send">发送1个请求</button>
<script>
  var btn = document.getElementById('send');
  btn.addEventListener('click',function () {
     // 使用原生的ajax 技术,发送一个网络请求
      // 1.创建XMLHttpRequest对象
      var xhr;
      if(window.XMLHttpRequest){
          xhr = new XMLHttpRequest();
      }else {
          xhr = new ActiveXObject('Microsoft.XMLHTTP');
      }

      // 2.准备发送
      /*
       参数1: 请求方式 (get/post)
       参数2: 请求url
       参数3: 是否异步
    */
      xhr.open('get','http://localhost:3000/api/one',true);

      // 3. 发送
    xhr.send();

      // 4. 监听服务器的响应
      // 一旦服务器响应回来之后,就会执行这个函数
      xhr.onreadystatechange = function () {
          console.log(xhr.readyState);
          if(xhr.readyState === 4){  // 代表服务器已经给了响应,不代表响应成功
              if(xhr.status === 200){
                  console.log(xhr.response);
              }
          }
      }

  });
</script>
</body>

// 结果:
/*
2
3
4
{"status":200,"result":"this is one....."}
*/

?

?

?


index.js 路由:

router.get('/api/two',next)=>{
    console.log(req.query);
    res.json({
        status:200,result:'this is two.....'
    })
});


router.get('/two',next) {
    res.render('index2',{ title: 'Express' });
});

index2.ejs

<body>
<input id="account" type="text" name="account">
<input id="pwd" type="text" name="pwd">
<button id="send">发送一个请求</button>
<script>
    window.onload=function () {

        var btn = document.getElementById('send');
        btn.onclick = function () {
            // 使用原生的ajax 技术,发送一个网络请求
            // 1.创建XMLHttpRequest对象
            var xhr;
            if(window.XMLHttpRequest){
                xhr = new XMLHttpRequest();
            }else {
                xhr = new ActiveXObject('Microsoft.XMLHTTP');
            }

            // 从页面获取需要传递的数据
            var userName = document.getElementById('account').value;
            var pwd = document.getElementById('pwd').value;

            // 2.准备发送
            /*
             参数1: 请求方式 (get/post)
             参数2: 请求url
             参数3: 是否异步
          */
            // 后面跟一个随机数值,保证每次发送ajax请求,都是真的发然后从响应中获取最新数据,而不是从缓存中取得
            xhr.open('get','http://localhost:3000/api/two?account=' + account + '&pwd=' + pwd + '&random=' + getRandomStr(),true);

            // 3. 发送
            xhr.send();

            // 4. 监听服务器的响应
            // 一旦服务器响应回来之后,就会执行这个函数
            xhr.onreadystatechange = function () {
                // 5. 处理响应的数据 (对方说话)
                console.log(xhr.readyState);
                if(xhr.readyState === 4){  // 代表服务器已经给了响应,不代表响应成功
                    if(xhr.status === 200){
                        console.log(xhr.response);
                    }
                }
            }
        }
    }


    function getRandomStr() {
        return Math.random() + (new Date().getTime())
    }
</script>

</body>

前端打印:

2
3
4
{"status":200,"result":"this is two....."}

服务端打印:

{ account: '[object HTMLInputElement]',pwd: '123456',random: '1547356096169.2708' }
GET /api/two?account=[object%20HTMLInputElement]&pwd=123456&random=1547356096169.2708 200 8.824 ms - 42

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读