任务24 ajax

1.ajax 是什么?有什么作用?

  • AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),是一种用于创建快速动态网页的技术。传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面;AJAX 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求,核心对象XMLHTTPRequest),通过在后台与服务器进行少量数据交换,可以使网页实现异步更新。

2.前后端开发联调需要注意哪些事情?后端接口完成前如何 mock 数据?

  • 需要注意的事情
  1. 前后端充分了解项目的需求
  2. 前后端沟通设计接口,约定好数据格式 以及前端需要传递什么样的参数,还有传递的方式,
  3. 共同制定接口说明,出一个文档
  4. 前后端独立开发,前端向Mock Server发送请求,获取模拟的数据进行开发和测试
  5. 前后端都完成后,前后端连接调试(前端修改配置向Real Server而不是Mock Server发送请求)。
  • mock数据
  1. 使用XAMPP等工具,搭建本地php服务器用,编写php脚本提供临时数据;
  2. 使用mock.js生成模拟数据,拦截AJAX请求,并且返回模拟的数据进行测试;
  3. 使用node server-mock,解决后端模板的渲染和AJAX接口的处理来模拟数据

3.点击按钮,使用 AJAX获取数据,如何在数据到来之前防止重复点击?

  1. setTimeout + clearTimeout连续的点击会把上一次点击清除掉,也就是ajax请求会在最后一次点击后发出去

  2. disable 按扭

  3. 用一个变量锁定啊。用户一点击,flag变成false,再点也不发送请求,ajax成功以后flag设为true

       var lock= false;    //设置锁变量; document.querySelector('.btn').addEventListener('click',function(){
       if(lock){        //如果有锁存在,则不执行AJAX
         return;  
       }
         lock= true;      //上锁
         ajax({
         url:'',
         type:'';
         data:{},
             success:function(ret){
         lock= false;  //解锁 
           },
         error:function(){
         }
       });
     });
    

参考知乎

代码题
1.封装一个 ajax 函数,能通过如下方式调用

//封装ajax
    function ajax(opts){
        //创建 XMLHttpRequest 对象
        var xhr=new XMLHttpRequest();
        //当请求被发送到服务器时,我们需要执行一些基于响应的任务。 每当 readyState 改变时,就会触发 onreadystatechange 事件
        xhr.onreadystatechange=function(){
            if(xhr.readyState==4&&xhr.status==200){
            //将服务器返回的文本xhr.responseText转换为JSON格式字符串
                var str=JSON.parse(xhr.responseText);
            //使用succss方法
            opts.succss(str);
                }
            if (xhr.status==404&&xhr.readyState==4) {
                //若请求失败,调用error方法
                opts.error();
                }
            }
    

        //创建发送到服务器的数据
        var dataStr="";
        for(var key in opts.data){
            dataStr+=key+"="+opts.data[key]+"&";
            }
        dataStr= dataStr.substr(0,dataStr.length-1);
        dataStr+='&='+new Date().getTime();

        //判断请求方式get or post
        if(opts.type.toLowerCase()=="get"){
            xhr.open("GET",opts.url+"?"+dataStr,true)
            xhr.send();
        }
        if(opts.type.toLowerCase()=="post"){
            xhr.open("POST",opts.url,true)
            //为了使post请求与提交web表单相同,将 Content-Type 头部信息设置为 application/x-www-form-urlencoded来模仿表单提交功能(post必须的)
            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
            xhr.send(dataStr);
        }
    }
        //ajax 对象 调用前面的函数
        document.getElementById('btn').addEventListener("click",function(){
            ajax({
                url:'phpajax.php',//后端接口地址
                type:"get",     // 类型, post 或者 get,
                data:{
                    username: 'xiaoming',
                    password: 'abcd1234'
                },
                succss:function(ret){
                    console.log(ret)         // {status: 0}
                },
                error:function(){
                    console.log("对不起,出错了")
                }
            })
        })

2.代码2-html
后端-php代码

  <?php 
    $start=$_GET['start'];
      $add=$_GET['len'];
      $li=array();
  for($i=0;$i<$add;$i++){
    $li[$i]='内容'.($start+$i+1);
    };
    echo json_encode($li);
 ?>

3.代码3
后端-php代码

<?php 
    $name=$_GET['username'];
    if($name=="hunger"){
    echo 0;
    }else{
    echo 1;
   }
?>
代码2和代码3本地服务器测试通过

版权为饥人谷和作者所有,若转发使用请注明出处.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,158评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,600评论 1 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,785评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,655评论 0 220
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,075评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,002评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,146评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,918评论 0 211
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,671评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,838评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,318评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,636评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,343评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,187评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,982评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,126评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,934评论 2 279

推荐阅读更多精彩内容

  • 问答 1. ajax 是什么?有什么作用? Ajax是Asynchronous JavaScript and XM...
    Maggie_77阅读 383评论 0 0
  • 1. ajax 是什么?有什么作用? AJAX全称是 Asynchronous JavaScript and XM...
    小木子2016阅读 429评论 0 0
  • 问答 1.ajax 是什么?有什么作用? AJAX = Asynchronous JavaScript and X...
    鸿鹄飞天阅读 234评论 0 0
  • 生命诚可贵,爱情价更高,不管何为故,健康最重要。 今天单位安排去体检了。说实话在这之前,我是有些紧张和些许担心的。...
    笨学徒阅读 533评论 17 5
  • 最近收到很多刚入门运营的伙伴询问全新APP上线前应该做哪些准备,前期工作比较琐碎,今天和大家一起梳理一下常规的准备...
    营小卒阅读 2,683评论 0 6