ajax2019-04-23

Ajax这种技术能够向服务器请求额外的数据而无须卸载页面(即刷新)

一.实现同步流程:

1、得到核心对象XMLHttpRequest对象

var xhr = new XMLHttpRequest();

2、准备/打开请求

open(请求类型GET/POST,请求的路径,是否异步true/false);

3、发送请求

send(参数/null);

注:如果是get请求,参数直接跟在请求路径后面,send()方法中设置null;

如果是post请求,有参数则设置参数,无参数设置为null;

4、解析响应数据

1、判断响应是否成功 status=200 (404=未找到资源;500=服务器异常;200=成功)

2、得到后台响应数据  responseText

例子:

<script type="text/javascript">

1、得到核心对象XMLHttpRequest对象

var xhr = new XMLHttpRequest();

console.log(xhr);

 2、准备/打开请求  open(请求类型GET/POST,请求的路径,是否异步true/false);

xhr.open("GET","js/data.json?uname=zhangsan&uage=10",false); // 同步请求

 3、发送请求  send(参数/null);

xhr.send(null);

 4、解析响应数据

if (xhr.status == 200) { // 1、判断响应是否成功 status=200

2、得到后台响应数据  responseText

console.log(xhr.responseText);

var user = JSON.parse(xhr.responseText);

console.log(user);

console.log(user.uname);

} else {

alert("失败状态码:" + xhr.status + ",失败原因:" + xhr.statusText);

}

</script>

二.实现异步流程:

1.得到核心对象XMLHttpRequest对象

var xhr = new XMLHttpRequest();

2.准备/打开请求

open(请求类型get/post,请求的路径,是否异步true/false);

3.发送请求

send(参数/null);

注:如果是get请求 ,参数直接跟在请求路径后面,send()方法中设置null;

        如果是post请求,有参数则设置参数,无参数设置为null;

4.解析响应数据:

        1.判断响应是否成功  status=200  (404=未找到资源;500=服务器异常;200=成功连接)

        2.得到后响应数据  responseText

例子:

<script type="text/javascript">

1.得到核心对象XMLHttpRequest对象

var xhr = new XMLHttpRequest();

console.log(xhr);

2.准备/打开请求 open(请求类型Get/post,请求的路径,是否异步true/false);

xhr.open("GET","js/data.json?uname=zhangsan$uage=10",true);//异步请求

3.发送请求  send(参数/null);

shr.send(null);

//监听readystate事件  (0=尚未调用open·方法; 1=已调用open方法未调用send方法,2=调用send方法,未接收到响应;3=接收到部分响应;4=响应完全接收)

xhr.onreadystatechange = function() {

//如果是异步请求,需要等待数据完全响应再做处理

if(xhr.readyState == 4){

4.解析响应数据  responseText

console.log(xhr.responseText);

var user = JSON.parse(xhr.responseText);

console.log(user);

console.log(user.uname);

}  else{

      console.log("失败状态码:" + xhr.status + ",失败原因:" + xhr.statusText);

                }

        }

}

</script>

三.post请求

实现流程:

异步:

1、得到核心对象XMLHttpRequest对象

var xhr = new XMLHttpRequest();

2、准备/打开请求

open(请求类型GET/POST,请求的路径,是否异步true/false);

3、发送请求

send(参数/null);

注:如果是get请求,参数直接跟在请求路径后面,send()方法中设置null;

如果是post请求,有参数则设置参数,无参数设置为null;

4、解析响应数据

1、判断响应是否成功 status=200 (404=未找到资源;500=服务器异常;200=成功)

2、得到后台响应数据  responseText

例子:

<script type="text/javascript">

 1、得到核心对象XMLHttpRequest对象

var xhr = new XMLHttpRequest();

console.log(xhr);

 2、准备/打开请求  open(请求类型GET/POST,请求的路径,是否异步true/false);

xhr.open("POST","js/data.json",true); // 异步请求

 由于Post请求的机制问题,需要模拟表单提交

xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

 3、发送请求  send(参数/null);

xhr.send("uname=zhangsan&uage=10"); // post请求如果有参数,需要将参数设置在send方法中

监听readystate事件 (0=尚未调用open方法;1=已调用open方法未调用send方法,2=调用send方法,未接收到响应;3=接收到部分响应;4=响应完全接收)

xhr.onreadystatechange = function() {

 如果是异步请求,需要等待数据完全响应后再做处理

if (xhr.readyState == 4) {

 4、解析响应数据

if (xhr.status == 200) { // 1、判断响应是否成功 status=200

 2、得到后台响应数据  responseText

console.log(xhr.responseText);

var user = JSON.parse(xhr.responseText);

console.log(user);

console.log(user.uname);

} else {

console.log("失败状态码:" + xhr.status + ",失败原因:" + xhr.statusText);

}

}

}

</script>

四.封装

实现流程:同异步流程

例子:

<script type="text/javascript">

var obj = {

method:"GET",

url:"js/data.json?aa=11",

async:true,

data:{

uname:"zhangsan",

uage:18

},

success:function(data){

// 做想处理的事情

console.log(data);

}

};

function ajax(obj) {

// 1、得到核心对象XMLHttpRequest对象

var xhr = new XMLHttpRequest();

var params = formatParam(obj.data);

// 判断是否是get请求,如果是则将参数拼接在url后面

if ("GET" == (obj.method).toUpperCase()) {

obj.url += (obj.url).indexOf("?") > 0 ? "&" +params : "?" + params;

}

// 2、准备/打开请求  open(请求类型GET/POST,请求的路径,是否异步true/false);

xhr.open(obj.method,obj.url,obj.async);

// 判断如果是POST请求

if ("POST" == (obj.method).toUpperCase()) {

// 由于Post请求的机制问题,需要模拟表单提交

xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

// 3、发送请求  send(参数/null);

xhr.send(params); // post请求如果有参数,需要将参数设置在send方法中

} else {

xhr.send(null); // get请求设置为null

}

// 判断是同步请求还是异步请求

if (obj.async)  { // 异步请求

// 监听readystate事件 (0=尚未调用open方法;1=已调用open方法未调用send方法,2=调用send方法,未接收到响应;3=接收到部分响应;4=响应完全接收)

xhr.onreadystatechange = function() {

// 如果是异步请求,需要等待数据完全响应后再做处理

if (xhr.readyState == 4) {

// 处理响应结果

callback();

}

}

} else { // 同步请求

// 处理响应结果

callback();

}

// 处理响应结果

function callback() {

// 4、解析响应数据

if (xhr.status == 200) { // 1、判断响应是否成功 status=200

// 2、得到后台响应数据  responseText

/* console.log(xhr.responseText);

var user = JSON.parse(xhr.responseText);

console.log(user); */

obj.success(xhr.responseText);

} else {

console.log("失败状态码:" + xhr.status + ",失败原因:" + xhr.statusText);

}

}

}

// formatParam({ uname:"zhangsan", uage:18 });

/*将对象格式的参数转换成等号拼接的字符串*/

function formatParam(data) {

// 判断参数是否存在

if (data == null) {

return "";

}

// 定义数组,接收每个参数字符串

var params = [];

for(var key in data) {

// js中通过push()方法向数组的最后追加

params.push(key+"="+data[key]);

}

console.log(params.join("&"));

var param = params.join("&");// uname=zhangsan&uage=18

return param;

}

五jquery调用ajax方法


1.ajax。html

格式:$.ajax({});

参数:

type:请求方式GET/POST

url:请求地址url

async:是否异步,默认是true表示异步

data:发送到服务器的数据

dataType:预期服务器返回的数据类型

contentType:设置请求头

success:请求成功时调用此函数

error:请求失败时调用此函数

例子:

$.ajax({

type:"get", // 请求类型 GET/POST

url:"js/data.json", // 请求路径

dataType:"json", // 预期服务器返回的数据类型

data:{ // 请求参数,键值对的json对象

},

success:function(data){ // 请求成功时的回调函数

console.log(data);

}

});

post类型只需要将get改成post就可以了

2.get.html

1.请求get文件,忽略返回值

$.get('../js/cuisine_area.json');

2.请求get文件,传递参数,忽略返回值

$.get('../js/cuisine_area.json',{name:"tom",age:100});

3.请求get文件,拿到返回值,请求成功后可拿到返回值

$.get('../js/cuisine_area.json',function(data){

console.log(data)

});

4.请求get文件,传递参数,拿到返回值

$.get('../js/cuisine_area.json',{name:"tom",age:100},function(data){

console.log(data)

例子:


/* 无参数,无返回值 */

// $.get("http://localhost:8080/jqueryAjax/ServletTest");

/* 有参数,无返回值 */

// $.get("http://localhost:8080/jqueryAjax/ServletTest",{uname:"zhangsan"});

/* 无参数,有返回值 */

/* $.get("http://localhost:8080/jqueryAjax/ServletTest",function(data){

console.log(data);

}); */

/* 有参数,有返回值 */

/* $.get("http://localhost:8080/jqueryAjax/ServletTest",{uname:"zhangsan"},function(data){

console.log(data);

}); */

post.html同上就是将get改成post

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容

  • AJAX 原生js操作ajax 1.创建XMLHttpRequest对象 var xhr = new XMLHtt...
    碧玉含香阅读 3,189评论 0 7
  • # Ajax标签(空格分隔): 笔记整理---[TOC]### 从输入网址开始:- 在学习ajax之前,你应该先了...
    V8阅读 255评论 1 0
  • Ajax和XMLHttpRequest 我们通常将Ajax等同于XMLHttpRequest,但细究起来它们两个是...
    changxiaonan阅读 2,230评论 0 2
  • ajax作为前端开发必需的基础能力之一,你可能会使用它,但并不一定懂得其原理,以及更深入的服务器通信相关的知识。在...
    萧玄辞阅读 818评论 0 0
  •   2005 年,Jesse James Garrett 发表了一篇在线文章,题为“Ajax: A new App...
    霜天晓阅读 888评论 0 1