ajax只有json流,ajax json

AJAX

AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

AJAX负责客户端数据和服务端数据的运输。

AJAX:Asynchronous JavaScript and XML(异步JavaScript和XML) 所有操作在htdocs

Ajax的核心就是是JavaScript对象XmlHttpRequest,这个对象为向服务器发送请求和解析服务器响应提供了流畅的接口。XmlHttpRequest可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。

家具的形态:

宜家(组装好的) -> 运输(拆成板) -> 家里(组装)

数据传输:

服务器(数据结构,数组、对象) -> 运行(特殊结构字符串) -> 客户端浏览器(数据结构,数组、对象)

市面上用的最多的字符串数据格式:

xml

特点:可以存储种类丰富的数据(自己设置标签)

缺点:解析起来比较困难

用于:大型的新闻网站 网易新闻 腾讯新闻 新浪微博 凤凰中文。

json(90%使用json)

特点:小,适用于一些小型的应用程序,解析起来比较简单

用于:移动端项目

javascript中的同步和异步:

同步:阻塞,必须等前面一个程序结束以后,才能进行后续的程序。

例子:很多人打热水,水龙头只有一个,必须排队。你必须等前面的人接完水以后,你才能去进行接水这个动作。

异步:非阻塞,前面一个程序是否执行完成,并不影响你程序的执行。

例子:很多人打热水,水龙头数量是无限。别人接水对我们来说是没有任何影响。

ajax实例

var oBtn = document.getElementById('btn1');

oBtn.onclick = function(){

var xmlhttp; //声明一个ajax对象

//做浏览器兼容,ie6及ie6一下,我们可以通过 new ActiveXObject('Microsoft.XMLHTTP');

if (window.XMLHttpRequest){

// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码

xmlhttp=new XMLHttpRequest();

}else{

// IE6, IE5 浏览器执行代码

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

xmlhttp.onreadystatechange=function(){

if (xmlhttp.readyState==4 && xmlhttp.status==200){

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

}

}

xmlhttp.open("GET","/try/ajax/ajax_info.txt",true); //在地址栏输入地址

xmlhttp.send(); //提交 回车

/*

try catch方法创建ajax对象

var xmlhttp = null;

try{

xmlhttp = new XMLHttpRequest();

}catch(error){

xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');

console.log(error);

}

*/

}

open()

第一个参数: 请求方式 get / post

第二个参数:下载数据的地址

第三个参数:是否异步, 如果true,代表异步去执行ajax

异步:非阻塞,前面代码的执行并不会影响后面代码的执行

同步:阻塞,前面代码的执行会影响到后面代码的执行

onreadystatechange事件 是在 readyState属性发生改变的时候触发

readyState属性:ajax工作状态

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

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

2 (载入完成)send方法完成,已经接受到全部响应内容

3 (解析) 正在解析响应内容

4 (完成) 响应内容解析完成,我们可以在客户端调用数据。

status: 服务器状态,HTTP状态码

200 : 交易成功

404 : 没有发现文件、查询或URl

responseText: 返回以文本形式存放的内容 ajax请求返回的内容就被存放在这个属性下面

responseXML: 返回以XML形式存放的内容 */

Ajax优缺点

优点:

最大的一点是页面无刷新,用户的体验非常好。

使用异步方式与服务器通信,具有更加迅速的响应能力。

可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。

基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。

缺点:

ajax不支持浏览器back按钮。

用AJAX做交互的时候,是通过js+xmlhttp来获取其他页面信息,对于浏览用户来说,是一个隐性的UE,感觉不到浏览器地址栏的URL的变化,对浏览器来说,地址栏的URL没发变化,产生不了HISTORY。虽然说这个问题是可以解决的,但是它所带来的开发成本是非常高的,和ajax框架所要求的快速开发是相背离的。这是ajax所带来的一个非常严重的问题。

安全问题 AJAX暴露了与服务器交互的细节。

对搜索引擎的支持比较弱。

破坏了程序的异常机制。

不容易调试。

一些手持设备(如手机、PDA等)现在还不能很好的支持ajax。

表单: 数据提交

action:数据提交的地址,默认是当前页面

method:数据提交的方式, get/post,默认是get方式

get

http://localhost/code/1.get.php?username=Tom&password=123456&age=18

特点:把数据名称和数据值用=链接,如果有多个的话把多个数据组成用&进行链接,然后把数据放在url?后面,传到指定的页面

缺点:

1、不安全

2、传递数据有限 2kb

post

配置参数 enctype:提交的数据的格式,默认 application/x-www-form-urlencoded

特点:浏览器内部进行提交

优点:

1、安全

2、理论上,可以传输的数据是无限的。

post方法,数据放在send(里面作为参数传递)

post没有缓存问题

post无需编码

ajax_GET

var oBtn = document.getElementById('btn1');

oBtn.onclick = function(){

//1、创建ajax对象

var xhr = null;

try{

xhr = new XMLHttpRequest();

}catch(error){

xhr = new ActiveXObject('Microsoft.XMLHTTP');

console.log(error);

}

//2.open

//如果url中有中文,可以通过encodeURI进行编码

//如果想忽略缓存,可以在url的后面链接时间戳

xhr.open('get', '1.get.php?username=' + encodeURI('钢铁侠') +'&password=123456&age=18&' + new Date().getTime(), true);

//3、send

xhr.send();

//4、接收数据

xhr.onreadystatechange = function(){

if(xhr.readyState == 4 && xhr.status == 200){

alert(xhr.responseText);

}else{

alert('出错了,Err:' + xhr.status);

}

}

}

ajax_post

var oBtn = document.getElementById('btn1');

oBtn.onclick = function(){

//1、创建ajax对象

var xhr = null;

try{

xhr = new XMLHttpRequest();

}catch(error){

xhr = new ActiveXObject('Microsoft.XMLHTTP');

console.log(error);

}

//2.open

xhr.open('post', '1.post.php', true);

//设置post请求的编码问题 设置在open方法的下面,send方法的前面

xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded'); //声明发送的数据类型

//3、send

//post方式,数据放在send里面作为参数进行传递

xhr.send('username=钢铁侠&password=123456&age=18');

//4、接收数据

xhr.onreadystatechange = function(){

if(xhr.readyState == 4 && xhr.status == 200){

alert(xhr.responseText);

}else{

alert('出错了,Err:' + xhr.status);

}

}

}

封装ajax 写在ajax.js中

function ajax(method, url, data, successFunc, errorFunc{

//1.创建ajax对象

var xhr = null;

try{

xhr = new XMLHttpRequest();

}catch(error){

xhr = new ActiveXObject('Microsoft.XMLHTTP');

console.log(error);

}

//2.open

if(method == 'get' && data){

url += "?" + data;

}

xhr.open(method, url, true);

//3.send

if(method == 'get'){

xhr.send();

}else{

//设置post请求的编码问题 设置在open方法的下面,send方法的前面

xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded'); //声明发送的数据类型

xhr.send(data);

}

//4.接收数据

xhr.onreadystatechange = function(){

if(xhr.readyState == 4 && xhr.status == 200){

if(successFunc){

successFunc(xhr.responseText)

}

}else{

if(errorFunc){

errorFunc('出错了,Err:' + xhr.status)

}

}

}

}

封装ajax.js调用

var getBtn = document.getElementById('getBtn');

var postBtn = document.getElementById('postBtn');

getBtn.onclick = function(){

ajax('get', '1.get.php', 'username=Tom&password=123456&age=18', function(data){

alert('get' + data);

}, function(error){

alert(error);

});

}

postBtn.onclick = function(){

ajax('post', '1.post.php', 'username=Tom&password=123456&age=18', function(data){

alert('post' + data);

}, function(error){

alert(error);

});

}

JSON 对象

//函数

//JSON.parse() json格式的字符串 -> 数据结构

//JSON.stringify() 数据结构 -> json格式的字符串

//(两种数据结构,数组和对象,用[]写就是数组,用{}写就是对象)

//alert(JSON); //object JSON

//数组->字符串

var arr = [10, 20, 'hello', true];

var str = JSON.stringify(arr);

alert(str); //[10,20,"hello",true]

//字符串->数组

var str = '[10,20,"hello",true]';

var arr = JSON.parse(str);

//alert(arr);

//alert(arr[2]);

//对象 -> 字符串

var xiaoming = {

name: '小明',

age: 18,

sex: '男'

}

//alert(xiaoming); //object Object

var str = JSON.stringify(xiaoming);

//alert(str); //{"name":"小明","age":18,"sex":"男"}

//字符串 -> 对象

var str = '{"name":"小明","age":18,"sex":"男"}';

var obj = JSON.parse(str);

//alert(obj.name);

//eval()

//JSON.parse() 和 JSON.stringify() 是ECMA5新增方法

//eval() 低版本浏览器解析JSON数据的函数 对于json数据的格式要求非常高,最外层必须是数组,里面的元素必须是对象

var str = '[{"name":"hello","age":18}]';

var obj = eval(str);

alert(obj[0].name);

两个实例ajax获取json

1、通过ajax下载数据

2、下载的数据一般情况下都是json格式的字符串

3、解析

//实例1:getList_ajax

var oBtn = document.getElementById('btn1');

oBtn.onclick = function(){

ajax('get', 'getList.php', null, function(data){

var obj = JSON.parse(data);

alert(obj.username);

}, function(error){

alert(error);

})

}

//实例2:getNews_ajax

var oBtn = document.getElementById('btn1');

var oUl = document.getElementById('ul1');

oBtn.onclick = function(){

ajax('get', 'getNews.php', null, function(data){

var arr = JSON.parse(data);

for(var i = 0; i < arr.length; i++){

//创建节点,添加数据

var oLi = document.createElement('li');

var oA = document.createElement('a');

oA.href = '#';

oA.innerHTML = arr[i].title;

var oSpan = document.createElement('span');

oSpan.innerHTML = '【' + arr[i].date + '】';

oLi.appendChild(oA);

oLi.appendChild(oSpan);

oUl.appendChild(oLi);

}

}, function(error){

alert(error);

})

}

Ajax中解析Json的两种方法详解

eval(); 不推荐

JSON.parse(); 推荐

两种方法的区别

我们先初始化一个json格式的对象:

var jsonDate = '{ "name":"周星驰","age":23 }'

var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法

var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法

然后在控制台调用:

console.log( jsonObj.name ); // 两种方法都可以正确输入 周星驰

那么问题来了 两种方法有什么区别呢?下面我们稍微把代码改动一下

var jsonDate = '{ "name":alert("hello"),"age":23 }'

var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法

console.log( jsonObj.age ); //会先执行“alert”输出“hello” 然后才输出 23

var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法

cosole.log( jsonobj.age ) // 报错 这个错误告诉我们这个字符串是不合法的

小结:

“eval();”方法解析的时候不会去判断字符串是否合法,而且json对象中的js方法也会被执行,这是非常危险的;而“JSON.parse();”方法的优点就不用多说了,推荐此方法。

注意:“eval();” 和 “JSON.parser();” 这两个方法的参数只接受字符串,也就是说只能解析字符串!!

前端提供给后台的只能是字符串数据格式,后台返回给前台的就看返回的是什么数据格式,是字符串就必须解析之后再用。

bejson.com

将下载到的json格式的字符串,解析成对应的数据结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值