AI智能
改变未来

JSON,ajax 和 jQuery包装的ajax,巨详细

JSON(JavaScript Object Notation,)(JS 对象表示法) 是一种轻量级(和xml相比)的数据交换格式
{key:value,key:value};
value:可以有3种写法;
1、基本类型(字符串、数字、布尔值)
2、数组
{lastname:“李四”,books:[“西游记”,{},18]}
3、对象{}
var student = {lastName:“张三”,age:18}
var student = {lastName:“张三”,age:18,car:{pp:bmw,price:9848944},info:[{bookname:“西游记”,price:98},18,true]}
如果服务器返回给浏览器的数据是JS对象这种样子,浏览器使用js解析就很方便

//一个复杂的js对象var student = {lastName : \"张三\",age : 18,car : {pp : \"bmw\",price : 9848944},info : [ {bookname : \"西游记\",price : 98}, 18, ture ]};

JSON:js对象进行传输(http只能传输文本)
什么是一个js对象?这就是
{lastname:“张三”,age:18}

var student2 = {lastName : \"张三\",age : 18}

JSON(js内置的对象);将js对象转为json(应该是js对象字符串表示法)字符串,json把对象变成字符串的格式

var strJson = JSON.stringify(student2);//将JS对象转化成json

alert(typeof strJson);//返回的值的是String类型

JSON需要掌握的方法:
JSON.jsonify:把js对象转成字符串
JSON.parse:把字符串转成js对象,就可以用js对象里的变量了

//假设服务器给了我们这么一个字符串var Jsonstr = JSON.stringify(stu);//想使用这个字符串,并获取到它原来代表的js对象里面的属性值//需要把字符串(满足js对象表示法(json)格式)转成js对象var stu02 = JSON.parse(Jsonstr );//将字符串回转为js对象

什么是AJAX
Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML):是一种无刷新页面与服务器的交互技术。页面不刷新就可以拿到服务器的信息

不用ajax的交互(原来的交互):

1、点击发送请求
2、服务器收到请求,调用对应的servlet进行处理,servlet处理完成,会有响应信息生成
3、浏览器收到了服务器响应的数据,把之前的页面清除,展示新的数据,效果:页面刷新了
访问此页面

点击后发送请求:

现在的交互(依赖一个XMLHttpRequest对象):

AJAX的基础:XMLHttpRequest,而且所有浏览器都支持

1、XMLHttpRequest对象帮我们发送请求
2、服务器收到请求,调用对应的servlet进行处理,servlet处理完成,会有响应信息生成
3、XMLHttpRequest对象收数据(浏览器就感受不到这个数据了,xhr对象收到这个数据)

以前VS现在

XMLHttpRequest怎么使用呢?步骤是什么呢?

xhr原生编程:
1、创建xhr对象
var xhr = new XMLHttpRequest();
2、建立连接
xhr.open(“GET”,“login”,true);
3.传输数据
xhr.send();
4.接收数据,给xhr绑定一个事件

//监听xhr状态xhr.onreadystatechange=function(){if (xhr.readyState==4 && xhr.status==200)//两个属性判断xhr响应是否成功{document.getElementById(\"myDiv\").innerHTML=xhr.responseText;//xhr里面有一个responseText,作用是拿到(文本内容)返回的字符串,字符串还要转化}}

xhr原生编程非常麻烦,使用jQuery包装的ajax请求

1、$.get()2、$.post()3、$.ajax(掌握)

小插曲:使用<%=new Date()%>,一定要导入这个

<%@ page import=\"java.util.*\"%>

插入一段代码,这段代码讲的是ajax的$.get()用法


这张图只为解释
pageContext.setAttribute(“ctp”, request.getContextPath());所返回的值

<%pageContext.setAttribute(\"ctp\", request.getContextPath());//pageContext是在整个Web应用上都是有效的,//可以理解为所有的网页,因为这个对象是常常用来共享资源的//request.getContextPath()得到当前页面的项目名,即是ajax%><body><script type=\"text/javascript\">//一个复杂的js对象</script><%=new Date()%><a href=\"getinfo\" id = \"aBtn\">获取信息</a><div>显示信息:${msg}</div></body><script type=\"text/javascript\">/*1、$.get */$(\"#aBtn\").click(function(){//$.get(url,[data],[callback],[type])//[]代表这个参数可以不传递//data:是需要传递的数据,格式可以使“k=b&k=v”也可以传js对象,会自动转为k=v&k=v的形式//callback:定义一个回调函数,随便定义一个参数,这个参数就封装了服务器返回的数据//type:返回的数据类型,可以不写,自动判断$.get(\"${ctp}/getinfo\",{lastname:\"张三\",age:18},function(abc){alert(abc);});return false;});</script>

alert出的信息!!!!!

上面服务器的代码麻烦了,现在
服务器使用JSON工具,生成JSON字符串

Ajax改变了我们传统的交互方式

传统:
1、发请求
2、服务器收到请求,处理请求经常要给页面携带数据。request.setattribute(“map”,map);转发到页面
3、浏览器收到页面数据,在页面使用el表达式获取数据。el表达式:${}
导致页面整个刷新,造成很大服务器负担

只让服务器返回我们需要的数据部分数据即可,不用返回整个页面;xhr替代浏览器来接收响应,发送请求;利用dom增删改方式改变页面效果

什么是ajax?(异步无刷新页面)

异步:不会阻塞浏览器
同步:会阻塞浏览器

**xhr向服务器发送请求,并收到响应数据,利用dom增删改的方式改变页面效果。
**
dom:Document Object Model(文档对象模型)
get参数传递和post
get请求会把传递的参数写在传输路径后面用?隔开
post则不会
//get和post用法是一样的,只是一个发的get请求,一个发的post请求

<script type=\"text/javascript\">//url:请求地址//data:发送数据,可以写k=v&kv 也可以写成js对象//callback:回调函数,服务器响应成功自动调用函数//type:指定返回指定类型$(\"#aBtn\").click(function() {//$.get(url,[data],[callback],[type])//[]代表这个参数可以不传递//data:是需要传递的数据,格式可以使“k=b&k=v”也可以传js对象,会自动转为k=v&k=v的形式//callback:定义一个回调函数,随便定义一个参数,这个参数就封装了服务器返回的数据//type:返回的数据类型,可以不写,自动判断//$.get(\'${ctp}/getstuinfo\',\"lastName=admin&age=18\");//get和post用法是一样的,只是一个发的get请求,一个发的post请求$.post(\'${ctp}/getstuinfo\',\"lastName=admin&age=18\");return false;});</script>

使用ajax发送请求

<a id=\"BtnAjax\" href=\"getstuinfo\">获取学生信息-使用底层的Ajax方法</a>$(\"#BtnAjax\").click(function(){//发送ajax请求//所有请求的属性参数都是可以通过这个js对象定义var options = {url:\"${ctp}/getstuinfo\",//规定请求地址type:\"GET\",//请求方式data:{\"lastname\":\"sss\",\"age\":55},//发送数据success:function(data){alert(\"成功\"+data);},dataType:\"text\",error:function(a,b){alert(\"请求失败\"+b);}}}$.ajax(options);return false;//禁用页面请求})

由于这里的请求方式是href,链接的形式,在点击链接时,自动会发送请求,所以这里要先return false;禁用,然后通过ajax发送
服务器收到请求:

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » JSON,ajax 和 jQuery包装的ajax,巨详细