Json和AJAX总结

本文详细介绍了JSON的语法格式、与XML的区别,以及如何在JavaScript中进行对象和字符串的转换。同时,深入讲解了AJAX的工作原理、优缺点、GET和POST的区别,以及异步和同步处理。此外,还探讨了跨域问题、同源策略和解决方法,以及AJAX在低版本IE浏览器中的缓存问题。最后,文章提供了一个简单的AJAX封装示例。
摘要由CSDN通过智能技术生成

Json

什么是json

json的全称为:JavaScript Object Notation,是一种轻量级的数据交互格式。
							负责不同编程语言中的数据传递和交互。

json的语法格式

  • 数组(Array)用方括号(“[]”)表示。
  • 对象(0bject)用大括号(“{}”)表示。
  • 名称/值对(name/value)组合成数组和对象。
  • 名称(name)置于双引号中
  • 并列的数据之间用逗号(“,”)分隔
  • 值(value)有字符串、数值、布尔值、null、对象和数组。
注:json的格式与js中对象(object)的格式很像。
		但是json是基于ECMAScript语法,但这并不意味着json必须在js中使用,只是因为语法相似
JSON 数组:{
			"employees": [
					{ "firstName":"John" , "lastName":"Doe" }, 
					{ "firstName":"Anna" , "lastName":"Smith" }, 
					{ "firstName":"Peter" , "lastName":"Jones" }
						]
		}

json和XML的区别

XML格式:                          json数据格式:
<root>                                        {
	<name>老松 </name>                       "name":"老松",
	<age>108</age>                            "age":108,         
	<fruits>apple</fruits>                    "fruits":["apple","pear"]
	<fruits>pear</fruits>                    }		                  
</root>                                

xml:即可扩展标记语言,用于数据存储和传输,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制。
json数据:没有结束标签,长度更短,读写更快,能够直接被JavaScript解释器解析,可以使用数组

json数据方法(对象和字符串转换)

字符串转对象 JSON.parse()

var jSon='{"name":"老松","age":"108"}';
console.log(JSON.parse(jSon));

在这里插入图片描述

对象转字符串 JSON.stringify()

var jSon={
	"name":"老松",
	"age":"108"
	};
console.log(JSON.stringify(jSon))
//JSON.stringify(参数一,参数二,参数三)
//JSON.stringify(jSon,["name"],4)
//参数一:对象名
//参数二:数组中放要提取的数据可为多个
//参数三:格式化缩进值

在这里插入图片描述

AJAX

什么是AJAX

`
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)
AJAX是一种在无须重新加载整个页面的情况下,能够更新网页部分数据的技术

AJAX运行原理

ajax工作原理相当于在浏览器(客户端)与服务器之间加了一个中间层(ajax引擎),使用户操作与服务器响应异步化。一方面它向服务器提交一个请求,获取指定页面的内容;另一方面将指定的数据提交到服务器。
在这里插入图片描述

AJAX的优点

① 最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好。
② 使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力
③ 可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务 器和带宽的负担,节约空间和宽带租用成本。
④ 基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。

AJAX的缺点

① 取决于js。存在兼容问题
② 安全问题(ajax的源代码是可读的,攻击者可以从脚本插入系统)
③ AJAX虽然提高了用户体验,但无形中向服务器发送的请求次数增多了,导致服务器压力增大

get 和 post的区别

Get: get提交时参数会直接暴露在URL上,get 与 post 相比更简单也更快,而且在大多数的时候都能使用,但是get有数据量的限制。
Post: post能更新服务器上的文件或数据库向服务器发送大量的数据,在发送的内容可包含的未知字符用户输入时,post 比 get 更稳定也更可靠,get有数据量的限制而post则没有数据量的限制。

getpost
get是从服务器上获取数据post是向服务器传送数据
有数据量的限制。1024字节没有数据量的限制
只能提交字符串数据可以提交多种类型数据
速度较快速度较慢
有请求缓存没有缓存
会被收藏书签不会收藏书签
GET请求会将参数跟在URL后进行传递,数据在URL中可以看到POST请求通过headers提交。用户是不可见的

同步和异步

同步处理

触发 ajax,请求服务器,等待服务器处理请求, 在这个期间客户端不能做任何处理。当 ajax 执行完毕才会继续执行其他代码。
在这里插入图片描述

异步处理

触发到 ajax,请求服务器,在这个期间无论服务器有没有响应,客户端的其他代码一样可以运行。

在这里插入图片描述

ajax四部曲

(1)XMLHttpRequest 对象

ajax的核心:XMLHttpRequest 对象(简称XHR)

 if (window. XMLHttpRequest){
            xhr = new XMLHttpRequest();
        }else{
            xhr = new ActiveXObject( 'Microsoft. XMLHTTP') ;//兼容ie
        }

(2)设置请求方式和请求地址

//get请求
 xhr.open('get','地址?a=100&b=200',同步/异步);
 xhr.send();
//post请求
 xhr.open('get','地址',同步/异步);
 xhr.setRequestHeader('content-type','application/x-www-form-urlicoded');
 xhr.send('a=100&b=200')

(3)发送请求

 xhr.send();

(4)监听状态变化,处理返回结果并渲染页面

 xhr.onreadystatechange = function(){
            //判断请求是否成功
            if(xhr.readyState == 4){
                //判断数据是否接受成功
                if(xhr.status == 200){
                    console.log(xhr.responseText)
                }else{
                    console.log(xhr.status)
                }
            }
              
        }

readyState状态(xhr的状态)

readyState状态含义
0(请求为初始化)创建xhr对象,未调用open()
1调用open,未调用send(),连接已建立,但未发送
2请求已发送
3请求处理中,通常部分已完成
4请求已完成,响应成功

status状态(http的状态)

status状态含义
200 OK请求-响应成功
302跳转,响应头中的location地址
304 Not Modified请求资源没有修改,请直接使用客户端缓存的资源,并不是报错,是指缓存命中了,也就是说请求的这个资源客户端缓存中存在
403 Forbidden请求的资源拒绝访问(认证失败)
404 Not Found请求的资源不存在
500 Internal Server Error服务器内部错误

其他

form表单提交

注:提交数据时候回刷新表单

		<form action="1.html" method="post/get">			
			<input type="text" name="user" />
			<input type="submit" value="提交" />
		</form>

action: 提交到某个地址
method: 的值是 get和 post 就是用来提交表单的方式

http

文本传输协议,用于定义客户端和服务器传输的文本传输和规范
2.一个URL地址可以有以下几个组成部分:https://www.yarong.cn:8080/search?w=ajax
1.https是协议;
2.www.yarong.cn是域名;
3.8080是端口号;
4./search是路径;
5.?w=ajax是URL地址带的参数

HTTP:超文本传输协议,是一个客户端和服务器端请求和应答的标准。
HTTPS:安全超文本传输协议,基于HTTP开发,用于客户端和服务器之间交换信息。
区别:
(1)https协议需要到ca(电子服务认证)申请证书,一般免费证书较少,因而需要一定费用。
(2)http是超文本传输协议,信息是明文传输,https则是具有安全性的加密传输协议。
(3)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443

同源策略

同源策略是一种安全协议,是客户端脚本中中重要的安全度量标准,指一段脚本只能读取同一来源的窗口和文档的属性
1.同源策略要求协议、域名、端口号一致,这三个东西指的是URL地址中的不同部分。

跨域问题

前端调用后端接口,如果服务接口不在同一个域就会有跨域问题,所白了因为同源策源才有跨域问题
当我们发送XMLHttpRequest请求的时候,如果请求的是别的域(主机域名、端口)不同时,那么就会产生跨域问题(客户端无法获取服务端返回的数据)
不是XMLHttpRequest请求是不会有跨域问题的
解决方法:

  1. 服务器代理
  2. flash
  3. jsonp
  4. XHR2

jsonp

jsonp:是json的一种使用模式。可以让网页从别的域名(网站)那获取资料,即跨域读取数据。
原理:动态的创建script标签,因为script不受同源策略的影响,通过script向服务器发送请求,服务器把数据放在回调函数内返回回来。

script,img,link标签不受跨域影响。
但是,img和link标签只能实现单向通信,即只能从客户端向服务器传递数据,这是因为img获取图片进行加载,link是获取样式表加载,而script返回的是javascript代码执行。

XHR2

      HTML5提供的XMLHttpRequest Level2已经实现了跨域访问以及其他的一些新功能
      IE10以下的版本都不支持
      在服务器端做一些小小的改造即可
      header('Access-Control-Allow-Origin:*'); //*代表可访问的地址,可以设置指定域名
      header('Access-Control-Allow-Methods:POST,GET');

区别:
代理实现最麻烦,但使用最广泛,任何支持AJAX的浏览器都可以使用这种方式
JSONP相对简单,但只支持GET方式调用
XHR2最简单,但只支持HTML5,如果你是移动端开发,可以选择使用XHR2

汉字乱码解决

用encodeURI()先编译再解析decodeURI()

xhr.open('get','http://localhost:8082/Ajax/ajax.php?a='+encodeURI('张三')+'&b='+encodeURI('李四'),false);
decodeURI(window.location.search);
var a=decodeURI(location.search);
		function my(a){
			var obj={};
			var b=a.slice(1);
			var c=b.split('&');
			for(var i=0;i<c.length;i++){
				var d=c[i];
				var f=d.split('=');
				obj[f[0]]=f[1];]
			}
			return obj		
		}
		my(a)

缓存

缓存是什么:当我们第一次打开一个网页,浏览器会把这个网页复制一份放在缓存中
好处:可以减少流量和带宽,节约网络资源,增快页面访问速度。

cookie

http是无状态的,每一次请求都是独立的,就是当你第一次打开网页,第二次打开网页,服务器就不认识你了,
cookie的作用就是当你再一次打开网页的时候让服务器知道。
cookie是:服务器向客户端发的特殊信息,以文本的形式存在客户端。每次向服务武器发送请求的时候都会带上来记录客户端状态。如密码用户名等。

低版本 IE 浏览器的缓存问题

post没有缓存问题
在低版本的 IE 浏览器中,Ajax 请求有严重的缓存问题,即在请求地址不发生变化的情况下,只有第一次请求会真正发送到服务器端,后续的请求都会从浏览器的缓存中获取,即时服务器端的数据更新了,客户端依然拿到的是缓存中的旧数据。

解决方案:在请求地址后面加请求参数,保证每一次请求中的请求参数的值不相同。
在这里插入图片描述

ajax封装

	function ajax(options){
    var xhr = null;
    var params = formsParams(options.data);
    //创建对象
    if(window.XMLHttpRequest){
        xhr = new XMLHttpRequest()
    } else {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    // 连接
    if(options.type == "GET"){
        xhr.open(options.type,options.url + "?"+ params,options.async);
        xhr.send(null)
    } else if(options.type == "POST"){
        xhr.open(options.type,options.url,options.async);
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        xhr.send(params);
    }
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4 && xhr.status == 200){
            options.success(xhr.responseText);
        }
    }
    function formsParams(data){
        var arr = [];
        for(var prop in data){
            arr.push(prop + "=" + data[prop]);
        }
        return arr.join("&");
    }
 
}
ajax({
    url : "http://localhost:8082/Ajax/my.json",  // url---->地址
    type : "POST",   // type ---> 请求方式
    async : true,   // async----> 同步:false,异步:true 
    data : {        //传入信息
       a : "张三",
        b : 18
    },
    success : function(data){   //返回接受信息
       var a=JSON.parse(data );
        console.log(a)
    }
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值