视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
使用js如何调用json
2020-11-27 19:40:58 责编:小采
文档


本篇文章给大家详细分析了js调用json方法的总结,对此有需要的朋友可以参考学习下。

Ajax基础

ajax:无刷新数据读取,读取服务器上的信息

HTTP请求方法:

GET:用于获取数据,如浏览帖子

ajax.judgeXmlHttpRequest('get', 'index.php', function(data){
 alert(data); //这是服务器返回的数据
})

POST:用于上传数据,如用户注册

var dataJson = {
 name: 'ys',age: 123 
}
ajax.judgeXmlHttpRequest('post', 'index.php', function(data){
 alert(data); //这是服务器返回的数据
},dataJson)

GET与POST的区别:

GET:通过网址传递(放入url中),会将传递的数据放到网址上面,名字=值&名字=值

get方式容量小,安全性低,有缓存

POST:不通过网址传递

post容量较大,一般可达2G,安全性相对较高,没有缓存

原生Ajax的编写

Ajax运行步骤

创建一个Ajax对象

非IE6浏览器:

var oAjax=new XMLHttpRequest();

IE6浏览器:

var oAjax=new ActiveXObject("Microsoft.XMLHTTP");

连接到服务器

Ajax.open(方法,文件名,异步传输);

阻止缓存方法:

Ajax.open('GET','a.txt?t='+new Date().getTime(),true);

同步:js中指事情必须一件一件来

异步:js中指多件事情要一起做

ajax是做异步传输的,并不是同步

发送请求

Ajax.send();

接收返回值

请求状态监控:onreadystatechange事件:当自己的Ajax与服务器之间有通讯时触发,主要通过readyState属性来判断结束没有,结束了也并没有代表成功,status属性来判断

readyState属性:请求状态

0(未初始化)还没有调用open方法

1(载入)已经调用send()方法,正在发送请求

2(载入完成)send()方法完成,已经收到全部相应内容

3(解析)正在解析收到的响应内容

4(完成)响应内容解析完成,可以在客户端调用(完成并不一定成功,需要status来检测是成功还是失败)

status属性:

请求结果,是成功(200)还是失败(404):Ajax.status==200

返回值responseText:

从服务器返回来的文本:Ajax.responseText(返回的值是一个字符串,有时需要进一步处理成其他格式的形式)

oAjax.onreadystatechange=function(){
 //oAjax.readyState: 表示浏览器和服务器之间进行到哪一步了
 if(oAjax.readyState==4){ //读取完成
 if(oAjax.status==200){ //读取的结果是成功
 alert('成功:'+oAjax.responseText);
 }
 }
}

将原生Ajax封装成一个函数使用,最终编写的原生Ajax为:

GET方法封装的函数为:

function ajax(url,fnSuccess,fnFaild){
 //1.创建Ajax对象。js中,使用一个没有定义的变量会报错,使用一个没有定义的属性,是undefined。IE6下使用没有定义的XMLHttpRequest会报错,所以当做window的一个属性使用
 if (window.XMLHttpRequest) {
 var oAjax=new XMLHttpRequest();//非IE6
   }else{
 var oAjax=new ActiveXObject("Microsoft.XMLHTTP");//IE6
   }
 //2.连接到服务器
 oAjax.open('GET',url,true);
 //3.发送请求
 oAjax.send();
 //4.接收返回值
 oAjax.onreadystatechange=function(){
 //oAjax.readyState--浏览器和服务器之间进行到哪一步了
 if(oAjax.readyState==4){ //读取完成
 if(oAjax.status==200){ //读取的结果是成功
 fnSuccess(oAjax.responseText); //成功时执行的函数
    }else{
    if(fnFaild){ //判断是否传入失败是的函数,即用户是否关心失败时的结果
      fnFaild(oAjax.responseText); //对失败的原因做出处理
    }
    }
    }
   }
  }

POST方法封装的函数为:

function ajaxPost(url,id,fnSuccess,fnFaild){
 //1.创建Ajax对象
 if (window.XMLHttpRequest) {
 var xhr=new XMLHttpRequest();//非IE6
 }else{
 var xhr=new ActiveXObject("Microsoft.XMLHTTP");//IE6
 }
 //2.连接到服务器
 xhr.open("POST",url,true);
 //设置头信息
 xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
 var form=document.getElementById(id);
 //3.发送请求,传递数据
 xhr.send(serialize(form));
 xhr.onreadystatechange=function(){
 if(xhr.readyState==4){
 if ((xhr.status>=200 && xhr.status<300) || xhr.status==304) {
 fnSuccess(xhr.responseText);
 }else{
 fnFaild(xhr.responseText);
 }
 }
 };
}

字符集编码:网页和被请求的文件的编码要相同,如都是utf8

缓存,阻止缓存(经常改变的数据等,不能够缓存.主要用于GET方法),传参时在路径后面加?+'可变的数据' 可以不影响原数据

ajax('a.txt?t='+new Date().getTime(),function(str){
 alert(str);
},function(str){
 alert(str);
});

ajax请求动态数据:如json文件

1 ajax返回值是一个字符串,可通过eval转换后来读取返回的数组/json数据

alert(str);
alert(typeof(str));
var arr=eval(str);
alert(typeof(arr));
alert(arr[1]);
alert(arr[1].c);

2 结合DOM创建元素,来显示返回的内容

oBtn.onclick=function(){
 ajax('data/arr3.txt?t='+new Date().getTime(),function(str){
 var arr=eval(str);
 for (var i = 0; i < arr.length; i++) {
 var oLi=document.createElement('li');
 oLi.innerHTML='用户名:<span>'+arr[i].user+'</span>密码:<span>'+arr[i].pass+'</span>';
 oUl.appendChild(oLi);
 }
 },function(str){
 alert(str);
 });
}

数据类型-->返回的数据类型可能是xml(几乎已经淘汰),json(现在常用)   

下面来看个我最近刚写原生js通过get方法调用json的例子:

if(!isNaN(matchId)) {
 var xmlHttp = null;
 try {// Chrome, Firefox, Opera, Safari
 xmlHttp = new XMLHttpRequest();
 }catch (e) {
 try {// Internet Explorer IE 6.0+
 xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) {
 try {// Internet Explorer IE 5.5+
 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
 } catch (e) {
 alert("your browser not support ajax!");
 }
 }
 }
 window.onload = function () {
 xmlHttp.open("get",/api/clientMatch/commonMatchDiagram.json?matchId=" + matchId,true);
 xmlHttp.send();
 xmlHttp.onreadystatechange = doResult; //设置回调函数
 };
 function doResult() {
 var html='';
 if ((xmlHttp.readyState == 4)&&(xmlHttp.status == 200)) {//4代表执行完成,200代表执行成功
 var data = JSON.parse(xmlHttp.responseText);
 if(data.code == 200){
 //代码执行
 }
 document.getElementById('appMatch').innerHTML = html;
 }
 }
}

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

利用Angular如何实现变化检测

ES6中map、set与数组、对象的对比(详细教程)

使用Node.js如何实现静态服务器

下载本文
显示全文
专题