使用原生JS的AJAX读取json全过程

来源:互联网 发布:唯一网络怎么样 编辑:程序博客网 时间:2024/05/22 16:06

首先ajax(async JavaScript and xml)是用于前端与后端文件比如xml或者json之间的交互。他是一种异步加载技术,意味着你点击某个加载事件是再也不用刷新整个页面,而是发送局部请求,局部回应。由于AJAX不是完全前端,需要用到服务器,所以在做实验的时候必须把html文件和xml或json放到服务器部署的目录之中,在这里我使用的是TOMCAT 7X。

首先编辑一个简单的JSON文件,并命名为json.json,如下:

[{  "key":"value"}  ]
[html] view plain copy
print?
  1. function showJson(){  
  2. var test;  
  3. if(window.XMLHttpRequest){  
  4.     test = new XMLHttpRequest();  
  5. }else if(window.ActiveXObject){  
  6.     test = new window.ActiveXObject();  
  7. }else{  
  8.     alert("请升级至最新版本的浏览器");  
  9. }  
  10. if(test !=null){  
  11.     test.open("GET","json.json",true);  
  12.     test.send(null);  
  13.     test.onreadystatechange=function(){  
  14.         if(test.readyState==4&&test.status==200){  
  15.             var obj = JSON.parse(test.responseText);  
  16.             for (var name in obj){  
  17.                 alert(obj[name].key);  
  18.             }  
  19.         }  
  20.     };  
  21.   
  22. }  
  23. }  
  24. window.onload=function(){  
  25.   showJson();  
  26. };</span>  


1、使用AJAX,我们必须new一个XMLHttpRequest()的实例,在IE低版本浏览器中是ActiveXObject()。使用if语句判断即可。

2、通过判断readyState的交互状态以及status的交互状态来触发onreadystatechange事件。

这里展开介绍一下readyState的4种取值情况:

(1)值为0:请求还没有初始化,意思是还没有开始open();

(2)值为1:请求已经初始化了但是还没有发送,意思是还没有send();

(3)值为2:请求已经发送了,后台正在处理。

(4)值为3:请求还在处理,但是部分数据可以用了,具体什么意思我现在也不是很明白。

(5)值为4:后台服务器相应完毕,也就是你现在随时可以取得请求的数据。

但是当readyState==4时我们只能知道服务器响应完毕,但还不知道服务器有没有找到我们请求的那个文件,这时就要引用status了。

这里展开介绍一下status的几种常见取值情况:

(1)200:找到了请求的文件。

(2)404:找不到请求的文件。

(3)500:服务器出错。

在同时满足了readySate==4以及status==200时我们就可以得到我们想要的value了。

3、服务器返回的值是存在responseText对象里面的。这时我们可以使用JSON.parse()来取得里面的数据。

4、我们现在把JSON文件里的一整块数据都取了出来,但如果想取到其中的某一个块值比如说:value,就必须用到遍历,比如说for循环。这里的for循环我使用了另一种形式for(var name in obj),这里的意思是取得对象的值,存放在变量name里面。因为JSON文件的结构就是由很多对象组成的。

5、如果是使用“GET”,则send()里面的值为null。如果是POST,则需要传具体的参数比如:send(name);


最后写给刚接触AJAX的同学。如何运行这段代码(配置AJAX环境)。

(1)首先你需要下载一个服务器,我建议是TOMCAT。

(2)然后把包含有你html和json文件部署(黏贴)到Tomcat根目录下的webapps文件夹里。

(3)回到Tomcat根目录,打开bin文件夹,找到startup.bat。双击打开Tomcat服务器。

(4)打开浏览器,输入http://localhost:8080/检查Tomcat是否打开,如果出现404,有可能是8080端口被占用了,这时候回到Tomcat根目录下打开conf文件夹找到server.xml文件,找到这段代码:Connector port="8080"  ,把8080修改成8081或者8082,重新在浏览器中输入http://localhost:8081/看看打开了Tomcat了没。

(5)浏览器中输入你的html文件路径,比如:http://localhost:8080/test/index.html 即可。


              

个人备注:

1.       原生ajax的四个程,readyState和status。

new,open,send, onreadystatechange。

var xhr=new XMLHttpRequest(); //例化

xhr.open(“post”,”php/do.php”,true);//第一个参数是型,第二个参数是求的路径,第三个参数是是否使用异步机制

xhr.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);//如果是post请求,需要设置RequestHeader

xhr.send(“name=”+ encodeURIComponent(“wqq”)+”&age=18”);//()内是内容,如果是get求,没有报文头,写xhr.send(null)

xhr.onreadystatechange = function(){

    if(xhr.readystate == 4){

        if(xhr.status ==200){

            biaoti.innerHTML = xhr.responseText;

        }

   }

}

Ajax:readyState(状态值)和status(状态码)的区别

readyState,是指运行AJAX所经历过的几种状态,无论访问是否成功都将响应的步骤,可以理解成为AJAX运行步骤。

是XMLHttpRequest对象的一个属性,用来标识当前XMLHttpRequest对象处于什么状态。使用“ajax.readyState”获得。

readyState总共有5个状态值,分别为0~4,每个值代表了不同的含义

0 (未初始化)

对象已建立,但是尚未初始化(尚未调用open方法)

1 (初始化)

已调用send()方法,正在发送请求

2 (发送数据)

send方法调用完成,但是当前的状态及http头未知

3 (数据传送中)

已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,

4 (完成)

数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据

  

status,是指无论AJAX访问是否成功,由HTTP协议根据所提交的信息,服务器所返回的HTTP头信息代码。

使用“ajax.status”获得。

总体理解:可以简单的理解为state代表一个整体的状态。而status是这个大的state下面具体的小的状态。

 

通过哪个属性得到data?

答:xhr的responseText和responseXML。后者是XML解析了的。

jquery里是success回调里面的形参。 

为什传统的网需要整个面刷新
Ajax以前都是java,php开发网站,服务器端渲染,后面js在客户端越来越厉害,才有浏览器端渲染。ajax 
改造之后,面不再由服器来生了,而是前端定的。服器只管出非常精的(比如 json 数据。(实际上我才用 websocket,而不用 http 方式来通面就会瞬就出内容,面内容改候看上去也是瞬



异步刷新实现原理:

当xmlHttpRequest对象的readyState更新时,就会自动执行onreadystatechange绑定的js事件(体现异步),在该事件中操作DOM更新html页面(体现局部刷新)。

 


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 哺乳期乳房有硬块乳头有白点怎么办 税务查税拿到不开票销售合同怎么办 买地皮是集体证已交钱了怎么办 word里的字体都是英文版怎么办 华为手机开机卡在菊花那里怎么办 车辆挂牌时公司名称打错了怎么办 经营异常名录查不到怎么办移除 企业被列入经营税务异常名录怎么办 手机号被别人绑定了企业微信怎么办 刚出生一天的婴儿不肯吃奶怎么办 9个月孩子不好好吃奶怎么办 孩子2个月吃奶老是呛到怎么办 孩子4个月不好好吃奶怎么办? 3个月的孩子不吃奶肚子胀怎么办 刚出生的婴儿吃完奶打嗝怎么办 宝宝刚生下来一直睡觉不吃奶怎么办 刚生下来的婴儿不吃奶怎么办 刚生下来的小猫不吃奶怎么办 刚生的小羊羔不吃奶怎么办 刚出生的婴儿不会吸奶怎么办 生完小孩七十天妈妈咳嗽怎么办 带欣的名字三个字儿的怎么办 二十多岁的儿子沉迷游戏网络怎么办 为什么打开游戏网络却用不了怎么办 打来微信网页版显示证书错误怎么办 开了家定制家具店生意不好怎么办 宝宝起风疹怎么办要注意的问题 超市买的内裤西铁牌子没去掉怎么办 没申请生产许可证贴标了怎么办 淘宝没有品牌非要我写品牌怎么办没 意外怀孕明明一直用安全套的怎么办 找不到百度网盘的dns地址怎么办 小米众筹到了发货时间不发货怎么办 不知道电脑宽带连接账号密码怎么办 电脑如果宽带账号密码忘记了怎么办 xp电脑用户名和密码忘了怎么办 电脑的用户名和密码忘记了怎么办 电脑重置后需要用户名和密码怎么办 电脑登录用户名和密码忘记了怎么办 电脑登录用户名和密码忘了怎么办啊 微信无意中点了允许登录怎么办