JS DOM中Ajax的使用

一、概念

全称:Asynchronors Javascript XML  异步JS数据交换格式。

【Asynchronous】:异步的,即在执? AJAX 请求时不会阻塞后?代码的运?。
【JavaScript】:使? JavaScript 实现浏览器与服务器之间的数据交互。
【XML】:?种数据结构,AJAX 创建之初在与服务器进?数据交换时,使?的数据结构就是 XML。但是现在已经慢慢被 JSON 数据结构所取代。

二、步骤

1. 创建 XMLHttpRequest 对象。

//1、:创建 XMLHttpRequest 对象。
let xhr = new XMLHttpRequest();

考虑到浏览器版本的不同,做出简单的判断

let xhr;
if(window.XMLHttpRequest){
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执?代码
xhr = new XMLHttpRequest();
} else {
// IE6, IE5 浏览器执?代码
xhr = new ActiveXObject( ‘Microsoft.XMLHTTP‘ );
}

2. 打开连接。

格式:

xhr.open(method, url, async);
/**
*method:数据接收方式,GET/POST
*url:数据链接,JSON格式
*async:是否异步,JS的特性本身为异步,所以通常设为默认值“true”
*/

例子:

 xhr.open("get", "https://getman.cn/mock/getStudents/data.json", true);

3. 发送 HTTP 请求。

xhr.send();

若为GET方式传输,则不用填参数,若为POST请求,传递的数据是放在 send ?法的参数中。

xhr.send("username=zhangsan&pwd=123");

4. 处理服务器返回的消息,实现局部刷新。

xhr.onreadystatechange = function(){
         let text = xhr.responseText;
         console.log( text );
}

状态值 readyState 都会发?改变
0:请求未初始化,即还没有调? send ?法;
1:服务器连接已建?,即已调? send ?法,正在发送请求;
2:请求已接收,即 send ?法执?完成;
3:请求处理中,即正在解析响应内容;
4:请求已完成,且响应已就绪,即响应内容解析完成,可以在客户端进?调?了;=>只有当状态值为 4 时,才表示请求完成
   
请求完成后,判断请求状态,状态码 status 为 200 时表示请求成功

完整代码:

xhr.onreadystatechange = function(){
     if(xhr.readyState == 4 && xhr.status == 200){
              let text = xhr.responseText;
              console.log( text );
      }
}

三、封装自己的Ajax

AJAX 的操作是?种固定的模式,这让我们想到,是否能够将其操作流程封装,让我们在以后
的使?过程中更加?便。

function ajax({
  url,
  success,
  data = {},
  type = "get",
  async = true
}) {
  let xhr;
  //1、:创建 XMLHttpRequest 对象。
  if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
  } else {
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
  }
  //2、3、:打开连接。发送 HTTP 请求。(根据类型是 get 或者 post 来决定数据 data 不同的发送? 式)
  if ((type = type.toUpperCase()) == ‘GET‘) {
    xhr.open(‘get‘, url + ‘?‘ + jsonToString(data), true);
    xhr.send();
  } else{
    xhr.open(‘post‘, url, true);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded "); //?般数据都以该?式传输
    xhr.send(jsonToString(data));
  }
  //4、:处理服务器返回的消息,实现局部刷新。
  xhr.onreadystatechange = function () {
    if (xhr.readyState == 4) {
      if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
        let data = xhr.responseText
        success(data);
        // console.log(data);

      } else {
        // error && error();
      }
    };
  };
  //?来将数据由json对象转换成符合url查询部分格式的字符串,?便数据的传输
  function jsonToString(json) {
    var arr = [];
    for (var i in json) {
      arr.push(i + ‘=‘ + json[i]);
    };
    return arr.join(‘&‘);
  }
}

原文地址:https://www.cnblogs.com/yuanjunjundebo/p/12009997.html

时间: 2024-10-29 22:31:05

JS DOM中Ajax的使用的相关文章

js—— DOM中的node类型(二)

DOM中的node类型 DOM1中定义了一个Node接口,这个接口在js中作为Node类型实现,除IE外,其他浏览器都可以访问到这个类型.Js中所以节点类型都继承自Node类型,节点类型都享有共同的·基本属性和方法. 每个节点都有nodeType属性,表明节点类型,由12个常量表示,任何节点必居其一. Node.ELEMENT_NODE 1 元素节点 Node.ATTRIBUTE_NODE 2 属性节点 Node.TEXT_NODE 3 文本节点 ...... 常用的为以上三种,还有其他类型可去

js jQuery中Ajax请求参数转义问题

前几天在工作的时候,在和移动端做接口的时候发现,前端在传递参数的时候其中有+或者&时候,服务器获得串中+或者&都变成了空格,后台Java程序在解析的时候出错了! 具体代码如下: $(function () { var isPc = !(window.__detect.android||window.__detect.ios||window.__detect.phone), moonCakeNums, moonCakeIdentify= 0, <span style="col

JS学习之DOM节点的关系属性封装、克隆节点、Dom中Style常用的一些属性等小结

JS DOM节点: 在JS DOM中节点的关系被定义为节点的属性: 通常有以下几种节点之间的关系: (这里的关系是所有浏览器都支持的) parentNode    父节点 childNodes    子节点 firstChild    父节点里的第一个子节点 lastChild     父节点里的最后一个子节点 nextSibling    与子节点并列的下一个兄弟节点 previousSibling   与子节点并列的上一个兄弟节点 火狐与谷歌支持而ie8不支持的节点关系有: previous

JS Dom节点操作demo!

通过黑马课程的学习,在这里分享一个js Dom中节点操作的小练习 需求:使用js创建一个4*3的表格table. onload = function(){ function c(tagName){ return document.createElement(tagName); } var table = c('table'); var tbody = c('tbody'); table.appendChild(tbody); for(var i = 0;i<4;i++){ var tr = c(

基于JS的DOM 编程基础和Json语法及JS下的AJAX基础

1.在dom编程中:     注意:使用dom操作一般在页面完全载入之后,一般在window_onload事件里操作dom nodeName  表示节点的名称如:<input   type= "button"  value="确定" />    此时nodeName=“input” ; nodeValue  表示节点的值如<p>aaa</p> 此时的nodeValue="aaa",而nodeName="

js中ajax如何解决跨域请求

js中ajax如何解决跨域请求,在讲这个问题之前先解释几个名词 1.跨域请求 所有的浏览器都是同源策略,这个策略能保证页面脚本资源和cookie安全 ,浏览器隔离了来自不同源的请求,防上跨域不安全的操作. 跨域指的协议.域名.端口 有一个不同的情况下都是跨域 例:在本站点请求外站的数据是不允许的 //在本站点请求外站点的资源是不允许的 $(function () { $.ajax({ url: "http://127.0.0.1:14847/Web/jsonp.js", success

prototype.js 和 jQuery.js中 ajax 的使用

这次还是prototype.js 和 jQuery.js冲突的问题,前面说到过解决办法http://www.cnblogs.com/Joanna-Yan/p/4836252.html,以及上网说的大部分方法都只能解决$的冲突问题.我先引入了prototype.js 再引入jQuery.js,在用了jquery中的$,然后来用prototype中的ajax的时候,ajax的方法就不启作用了. 最后改为了用 jQuery.js中 ajax .现在记录下两者ajax调用的区分: <%@ page la

[JS]DOM和IE中的Event---简要总结

前几天巩固了Event事件,现在做一下总结以便以后参考. 一.DOM事件模型 DOM标准描述了一个Event对象,提供了触发事件的元素信息,并允许在脚本中获取该元素. 1.访问事件对象 DOM事件模型中,将Event对象引用传给处理事件,如: <p onclick=“displayType(event)”>Hello<p> <script> function displayType(e){alert(e.type);} </script> /*点击段落,将会

js事件对象--DOM中的事件对象/IE中的事件对象/跨浏览器的事件对象

事件对象    在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息.包括导致事件的元素.事件的类型,以及其他与特定事件相关的信息.例如,鼠标操作导致的事件对象中,会包含鼠标位置的信息,而键盘操作导致的事件对象中,会包含与按下的键有关的信息.所有浏览器对象都支持event对象,但支持方式不同. DOM中的事件对象 兼容DOM的浏览器会将一个event对象传入到事件处理程序中.无论指定事件处理程序时使用什么方法(DOM0级或DOM2级),都会传入event