文档章节

Ajax初识

cpp_monkey
 cpp_monkey
发布于 2014/06/15 01:24
字数 1665
阅读 55
收藏 7

    扯蛋

    在这个星期,甚至说在这一段时间内,因为工作需要,一直都在学习前端开始知识,想想就比较苦恼,当我学C语言时,小伙伴们也在学,当我学C++时,小伙伴们在学Web开发知识,当我学Web开发知识时,小伙伴们已经在学移动开发知识,我这是总慢人一步的节奏么?不过我的根本和吃饭家伙还是习佳佳,其他都是附带的,好了,不扯远了,还是回归正题吧。

     在本篇博文中,主要讨论的还是ajax的初级知识。首先,谈谈ajax是门什么技术,它出现的原因和背景是什么,接着,扯扯ajax内部结构是什么,在什么地方可以使用,最后,说一下它的使用。

    背景

    ajax的意思是Asynchronous Javascript And XML,取这四个单词的首字母拼凑而成,中文意思是异步js及xml(实际上现在使用的都是json而不是xml),咋一看,每个单词都认识,但是拼在一起就它认识我,我不认识它了。其实很简单,ajax就是使用了这几门技术组合成的一门新技术,它的功能就是在浏览器下,可以不通过刷新页面的形式,获取服务端的数据,例如:某度的搜索框,你输入了一个单词,搜索框会出现一个下拉框,显示相关的搜索词,这就是使用了ajax的地方(如下图),如果不适用ajax,你要实现此功能,估计要加一个按钮,上面写着相关搜索词,点击一下,刷新页面,才能显示出来。

    使用ajax的好处已经看到了,第一,交互好,让用户少做点事,方便快捷,设计师也不用考虑多一个按钮放什么地方,苦了程序员而已;第二,减少网络的传输量,因为在某些情况下,你只需要页面部分数据更新,其它地方都不需要,但是如果不适用ajax就要传输整个页面,增加了页面的加载速度,而且在互联网初期,带宽是很低的,能节约一点是一点,况且这节约的是一大部分。

    缺点是,在网络不好的情况下,ajax与服务器交互时间过长,而页面却没有任何反应,这用户体验对用户是致命的,因此,一般都要加上一个可视化组件,显示正在获取数据,而不是出现bug,页面挂掉的情况。

ajax内部结构

    ajax说的这么神奇,它又是如何实现的呢? 有几大关键点用于实现。

    1.  XMLHttpRequest对象(IE5 和 IE6 使用 ActiveXObject),由微软提供的,通过封装XMLHttpRequest的操作得到ajax接口。ajax能局部刷新都是依靠此对象!w3c的例子:ajax例子

xmlhttp.open("GET","demo.cgi",true);        //通过使用Get方法调用url,局部刷新页面
xmlhttp.send(null);                         //发送真正请求,open只是准备,并没有真正发送

     在IE不知道多少版本下- -||,浏览器是使用缓存数据,并不会请求服务器,因此需要在url后面添加一个随机参数,以确保每次都是请求服务器的数据。

xmlhttp.open("GET","demo.cgi?t=" + Math.random(),true);

    另一方面,可以在url后添加随机参数也就是说可以在url后添加参数,以此传递。

xmlhttp.open("GET","demo.asp?user=admin&passwd=admin",true);

    2.  Get和Post,不只是ajax内是Get和Post,整个Web开发,传输数据都是使用Get和Post,在ajax内,使用Get和Post是有一点点的区别,Get的调用形式参考上面,而Post的调用形式则如下

xmlhttp.open("POST","demo.cgi",true);            //传递的方法不同,没什么好说的
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");   //Post是用于传递大量数据,使用在表单的提交,这就是与Get的不同,Get是以url参数的形式,则是text/html,而Post则以表单,而表单则是使用application/x-www-form-urlencoded的形式,因此ajax使用Post请求时,需要模拟表单提交的形式,添加请求头部Content-type。
xmlhttp.send("user=admin&passwd=admin");        //Get的是为null的,Send的参数是专门为post方法服务的。

    3. readyState,存放XMLHttpRequest的状态,标识着一个ajax的请求从开始到结束,让开发者可以在不同状态变换时,可以做某些操作。

    • 0: 请求未初始化

    • 1: 服务器连接已建立

    • 2: 请求已接收

    • 3: 请求处理中

    • 4: 请求已完成,且响应已就绪

    4. 同步与异步,这一关系可以简单的理解为单进程与多进程,ajax使用的最多的就是异步方式。

xmlhttp.open("GET","demo.cgi",true);  //第三个参数决定是同步(false)还是异步(true)

    onreadystatechange,当readyState变换时,会触发此函数。ajax以异步(true)方式调用,必须实现此函数,否则请求无效。而同步(false)则不能实现此函数。

xmlhttp.onreadystatechange=function()            //选自http://www.w3school.com.cn/ajax/ajax_xmlhttprequest_onreadystatechange.asp
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }

    5. 回调函数(Call Back),将函数以参数的形式,传递给另一个函数,让其调用。例如,onreadystatechange调用时,需要返回服务器数据和自定义串组合,不能将onreadystatechange写死,这时将自定义函数传递给        onreadystatechange,让其调用组合。(好难说- -||)

function A(){
    functioin B(){
        return <p>test</p>;
    }
}

A();    //A得到的是空,因为B的返回数据不能返回到A的返回数据,这两者是不同的
//-----------------------------------------------------------------
function A(cb){
    functioin B(cb){
        return cb();
    }
}

A(function {
    return <p>test</p>;    //将函数以参数的形式传递,并运行。(好像问题还没解决。。)
});

运用

    ajax的使用很简单,就是传递一个json对象,jQuery调用ajax如下,其他的js库也差不多,可以依此类推。

$.ajax({                                                    //一个Ajax过程 
    type: "post",                                           //以post方式与后台沟通 
    url : "./demo.cgi",                                     //与此请求页面沟通 
    dataType:'json',                                        //从返回的值以 JSON方式 解释 
    data: 'username='+username+'&password='+password,       //发给服务器的数据有两项,分别是上面传来的u和p 
    success: function(json){                                //如果调用成功 
        alert(json.username+'\n'+json.password);            //打印出来
    }
});

  完整例子,一个自定义封装XMLHttpRequest对象的ajax接口。

© 著作权归作者所有

共有 人打赏支持
cpp_monkey
粉丝 0
博文 5
码字总数 4638
作品 0
深圳
私信 提问
初识react(四) react中异步解决方案之 redux-saga

回顾 初识react(一) 揭开jsx语法和虚拟DOM面纱 初识react(二) 实现一个简版的html+redux.js的demo 初识react(三)在 react中使用redux来实现简版计数器 今天demo是实现一个异步的计算器,探究...

言sir
2018/09/19
0
0
javascript-ajax基础

AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新(特点:1...

悠哈121
2018/07/23
0
0
初识Comet技术

初识Comet技术一、服务器推送技术概述服务器推送技术(Servers Push)的基础思想是将浏览器主动查询信息改为服务器主动发送信息。服务器发送一批数据,浏览器显示这些数据,同时保证与服务器的...

Airship
2016/10/31
19
1
初识websocket

前言:工作中在验证前端页面展示数据时,接触到websocket这一概念,这里粗略记录下关于websocket的理解和常用方式。 (1)什么是websocket? 命名:看起来好像和socket有某种关系,但是根据查...

在你的世界路过
2017/12/08
0
0
Ext.Error: Unable to parse the JSON returned by the server: You're trying to decode an invalid JSON String

Firefox给出的错误 Ext.Error: Unable to parse the JSON returned by the server: You're trying to decode an invalid JSON String: articlelist.jsp {"results":"100","rows":[{"id":"1"......

anonymous_007
2014/05/28
2.2K
2

没有更多内容

加载失败,请刷新页面

加载更多

Navicat使用教程:使用Navicat Premium 12自动执行数据库复制(二)

下载Navicat Premium最新版本 Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL、Oracle及PostgreSQL数据库,让管理不同类型的数据库更加的方便。 与...

电池盒
30分钟前
1
0
简单聊聊Linux学习经历

学习,是我们一生中都规避不了的一个话题,人的一生中都是在不断的学习,无论是功成名就的人士,还是一无是处的小混混,始终都处在一个不断学习的环境中,只是学习的内容千差万别,有的人是为...

linux-tao
30分钟前
1
0
如何才能从程序员成长为实战型架构师?必掌握这7大实战技能经验

想成为一名架构师,但是架构师对应的技能,我应该掌握哪些啊?以及掌握的程度是什么样的?如何成为一名真正的实战性架构师? 我简要分为以下7点来谈谈,从技能的角度抛砖引玉,希望你对你架构...

mikechen优知
41分钟前
2
0
vue里实现echarts中国地图

echartsDemo.vue <template> <div> <div id="chart_example"></div> </div></template><script> // 首先要 cnpm install echarts import echarts from 'echarts' import ......

Danni3
53分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部