一、XMLHttpRequest    【使用XMLHttpRequest时,必须将html部署到web服务器中】
1) 指定请求
1、实例化
eg:

    var http = new XMLHttpRequest();

http为实例化的XMLHttpRequest对象,该对象可以重用,但是这将会终止之前通过该对象挂起的任何请求。

2、指定请求
open(method,url,async)
参数:    
method:请求的类型;GET 或 POST    等
url:文件在服务器上的路径
async:true(异步)或 false(同步)【默认值为true】
eg:

    http.open("GET","data.xml");

3、设定请求头【请求体是否传递数据来调用】
setRequestHeader(key,value);
如果有请求头,需要调用该方法进行设定。
参数:
    1.key:  传递数据类型属性
    2.value:  对应的属性值  
eg:

    //将Content-Type设置为表单格式
http.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");

注意:
    XMLHttpRequest将自动添加以下这些请求头以防止伪造,我们无法向setRequestHeader()传递以下请求头。
    Accept-Charset        TE                 Content-Transfer-Encoding
    Accept-Encoding        Date            Trailer
    Connection            Expect            Transfer-Encoding
    Content-Length        Host            Upgrade
    Cookie                 Keep-Alive        User-Agent
    Cookie2                Referer            Via
    
4. 指定可选的请求主体并向服务器发送
send(param)
参数:
    param: 请求主体内容,如果没有,为null或者省略。
eg:

    /*
使用POST方法发送纯文本给服务器
*/
function postMessage(url,msg){
var request = new XMLHttpRequest();
request.open("POST",url);
request.setRequestHeader("Content-type","text/plain;charset=UTF-8");
request.send(msg);
}

2) 取得响应
1、HTTP状态码:
a、status    【以数字形式返回HTTP状态码】    
200      OK
404      Not Found
403   forbidden    JSONP【解决跨域请求,一般后台处理该问题】
500   后台代码异常
b、statusText    【以文本形式返回HTTP状态码】    
OK    
Not Found

2、获取响应的一些相关信息
getResponseHeader()  获取指定响应头
getAllResponseHeaders() 获取所有响应头
responseText                      获取文本形式的响应体
responseXML                     获取Document形式的响应体
readyState                          返回HTTP请求状态【每当 readyState 改变时,就会触发 onreadystatechange 事件】

readyState相关状态值:
0    open()尚未调用    UNSENT
1    open()已调用    OPENED
2    接收到头信息    HEADERS_RECEIVED
3    接收到响应主体    LOADING
4    响应完成        DONE【响应完成,可以获取响应体】

3、readystatechange 请求状态改变事件【使用时前面需添加on  eg:onreadystatechnage】
当readyState值改变为4或服务器的响应完成时,所有的浏览器都触发该事件
eg:

    /*
获取HTTP响应
*/
function getText(url,callback){
var http = new XMLHttpRequest();
http.open("GET",url);
request.onreadystatechange = function(){
//如果请求完成,并且请求成功
if(http.readyState === 4 && http.status ===200){
var type = http.getResponseHeader("Content-type");
if(type.match(/^text/)){ //如果响应是文本
callback(http.responseText);//执行回调函数
}
}
};
http.send(null);
}

3) 响应解码
1.MIME类型为text/plain,text/html,text/css 文本类型时,可以使用responseText属性解析
2.MIME类型为XML文档类型时,使用responseXML属性解析
3.如果服务器发送对象,数组这样的结构化数据作为其响应,他应该传输JSON编码的字符串数据。
通过responseText接受到它,可以把它传递给JSON.parse()方法来解析成js对象。

二、使用自己的方法封装原生ajax
eg:

    function myAjax(method,url,param,success,fail){
//后台服务器地址及端口号
var baseUrl = 'http://134.175.154.93:8099';
//前端传递给后台的参数
//handle当内部的异步执行成功的回调函数,需要将后台返回的数据交给handle
//1、创建XMLHttpRequest 对象
var http = new XMLHttpRequest();
//处理GET方式携带参数
if(method === 'GET' && param){
url += '?'+encodeFormData(param);
}else{ }
//2、向服务器发送请求
http.open(method,baseUrl+url);
//3、HTTp状态值readystate改变时的响应事件
http.onreadystatechange = function(){
//如果HTTP返回状态码为200(请求成功)且返回HTTP状态值为4(响应完成)时执行成功回调函数success()
if (http.status === 200 && http.readyState === 4) {
console.log('请求成功!!!');
success(JSON.parse(http.responseText)); //将返回的JSON字符串解析成js对象并作为回调函数的参数
}
//如果返回HTTP状态码不为200(不是请求成功)执行失败回调函数fail()
if(http.status !== 200){
fail(http.responseText);
}
};
//处理POST方式携带参数
if (method === 'POST' && param) {
//设置请求头其Content-Type类型为表单格式
http.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=UTF-8');
//4、将请求发送给服务器并携带数据信息
http.send(encodeFormData(param));
}else{
//4、将请求发送给服务器不携带数据信息
http.send();
} } //将js的对象转换成表单格式数据
function encodeFormData(data){
if(!data){
return "";
}
var pairs = [];
for(var name in data){
if(!data.hasOwnProperty(name)){
continue;
}
if(typeof data[name] == "function"){
continue;
}
var value = data[name].toString();
name = encodeURIComponent(name.replace("%20","+"));//编码名字
value = encodeURIComponent(value.replace("%20","+"));//编码值
pairs.push(name+"="+value);
}
return pairs.join('&');
}

js原生Ajax(十四)的更多相关文章

  1. JS原生ajax

    原文链接:http://caibaojian.com/ajax-jsonp.html 一.JS原生ajax ajax:一种请求数据的方式,不需要刷新整个页面: ajax的技术核心是 XMLHttpRe ...

  2. JS原生Ajax&Jquery的Ajax技术&Json

    1.介绍Ajax Ajax = 异步 JavaScript 和 XML Ajax是一种创建快速动态网页的技术 通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意味着可以不用整个 ...

  3. JS原生ajax与Jquery插件ajax深入学习

    序言: 近来随着项目的上线实施,稍微有点空闲,闲暇之时偶然发现之前写的关于javascript原生xmlHttpRequest ajax方法以及后来jquery插件ajax方法,于是就行了一些总结,因 ...

  4. js原生Ajax的封装与使用

    一.原生Ajax代码的封装如下: (function() { var XHR = { createStandardXHR: function() { return new XMLHttpRequest ...

  5. js原生Ajax 的封装和原理

    原理及概念 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是一种用于创建快速动态网页的技术. 动态网页:是指可以通过服务器语言结合数 ...

  6. Jquery学习笔记 --ajax删除用户,使用了js原生ajax

    主要复习了php的pdo数据库操作,和js的ajax,真麻烦,希望jquery的ajax简单点. index.php: 1 <!DOCTYPE html> 2 <html lang= ...

  7. [代码]JS原生Ajax,GET和POST

    javascript/js的ajax的GET请求: <script type="text/javascript"> /* 创建 XMLHttpRequest 对象 */ ...

  8. Jquery学习笔记(10)--ajax删除用户,使用了js原生ajax

    主要复习了php的pdo数据库操作,和js的ajax,真麻烦,希望jquery的ajax简单点. index.php: <!DOCTYPE html> <html lang=&quo ...

  9. js 原生 ajax

    //js ajax function Ajax(url,type,data,comFun,sucFun,errFun) { //1.创建XMLHttpRequest对象 var xmlHttpRequ ...

随机推荐

  1. Escape character is ‘^]’什么意思?怎么使用telnet

    在linux/unix下使用telnet(telnet ip 端口号)连接主机时提示“Escape character is '^]'.”,这是什么意思?“^”是Ctrl键的意思!1.这个提示的意思是 ...

  2. Echarts在同一网页按顺序展示多图

    Echarts Page:同一网页按顺序展示多图 from pyecharts import Page page = Page("") page.add(pie).add(frie ...

  3. ABP 从core降到级.net framework

    后台: Application层得先写接口 再写实现,不然 abp.services.app 这个里面就没有该service.并且service保留的接口,就是interface里面定义的接口. 文件 ...

  4. 联想笔记本上Ubuntu无线网卡问题

    可能有两个问题: 1.无无线网卡驱动 2.无线网卡驱动不能自动加载 问题1:无线网卡驱动 百度出网卡驱动iwlwifi-9000,如iwlwifi-9000-pu-b0-jf-b0-34.618819 ...

  5. memcpy和strcpy的区别

    strcpy和memcpy主要有以下3方面的区别. 复制的内容不同.strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组.整型.结构体.类等. 复制的方法不同.strcpy不需要指 ...

  6. TCP/IP协议总结

    TCP/IP网络协议栈分为四层, 从下至上依次是: 链路层 其实在链路层下面还有物理层, 指的是电信号的传输方式, 比如常见的双绞线网线, 光纤, 以及早期的同轴电缆等, 物理层的设计决定了电信号传输 ...

  7. 关于codeforces加载慢

    昨天cdx报名cf,打开网页10多分钟才交了.... 今天问了wxy,百度了一下,以前也搜过,然后就忘记了. 今天记一下.  1.右键单击开始按钮,打开资源管理器,在资源管理器的地址栏中填写" ...

  8. 【线段树】【P4062】 [Code+#1]Yazid 的新生舞会

    Description 给定一个长度为 \(n\) 的序列,求有多少子区间满足区间众数严格大于区间长度的一半.如果区间有多个出现次数最多且不同的数则取较小的数为众数. Limitation 对于全部的 ...

  9. html 指定页面字符集的两种方式

      1.html指定页面字符集的两种方式 方式一: <meta charset="utf-8"> 方式二: <meta http-equiv="Cont ...

  10. 【Gamma】Scrum Meeting 7

    前言 会议定点:大运村公寓 会议时间:2019/6/5 会议目的:明确下阶段目标 一.任务进度 组员 上周任务进度 下阶段任务 大娃 修复后端bug 辅助做好引导录屏 二娃 撰写会议博客 撰写会议博客 ...