最详细的原生js实现ajax的封装

1. ajax的介绍

1.1 含义

ajax 的全称是Asynchronous JavaScript and XML
简单理解下:ajax就是异步的js和服务端的数据

1.2 组成

异步的js:事件,对象等
其他js:数据处理和解析的js
服务器的载体:xhr对象
服务端的数据:json,xhr,html,txt等字符型数据

1.3 作用

它作为前端向后端发送数据请求的重要手段,可以实现网页无刷新加载数据.

1.4 利弊

与传统的form表单的get和post方式相比较,ajax的优点很明显

优点:1.提升加载速度,实现局部加载
     2.节省性能,能很好提升用户体验

当然,事物都是相对的,缺点如下

缺点:1.破坏了浏览器的前进后退功能
     2.破坏了seo的网络优化

2. ajax的书写

2.1.1 ajax的GET请求方式

GET请求的数据会附在URL之后, 以 ? 分割URL和传输数据, 参数之间以 & 相连

//1.创建xhr对象
var xhr = new XMLHttpRequest();
//2.xhr的发送方式:get
xhr.open("GET", url, true)
//参数1:请求方式
//参数2:url是后端文件所在服务器的位置
//参数3:异步true;同步false
//3.监听xhr对象的状态
xhr.onreadystatechange = function () {
        if (xhr.readyState == 4 && xhr.status == 200) {
            //客户端状态码为4:响应内容解析完成,可以调用
            //服务端的状态码为200:交易成功
            console.log(xhr.responseTxt)
            //返回响应信息
        }
        //4.发送信息
        xhr.send();

2.1.2 小bug

以上是最基本的ajax代码,有两处小bug, 在封装过程中会解决

bug1:传的参数为空时,会报错
bug2:浏览器的缓存干扰使得数据无法刷新

2.1.3 ajax的Get方式封装

//接收三个参数:后端文件地址,回调函数和数据(对象格式)
function ajaxGet(url, callback, data) {
    //1.解析发送的数据
    data = data || {};
    //修复bug1:参数为空变为空对象
    var str = "";
    for (var i in data) {
        str += `${i}=${data[i]}&`;
        //拼接get的数据格式
    }
    //2.拼接url
    var d = new Date();
    url = url + "?" + str + "__sjc=" + d.getTime();
    //修复bug2:拼接一个不会重复的时间戳,欺骗缓存;
    //时间戳的命名应该尽量复杂,防止后端读取到.
    //3. 准备ajax
    var xhr = new XMLHttpRequest();
    xhr.open("GET", url, true);
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4 && xhr.status == 200) {
            callback(xhr.responseText);
        }
    }
    xhr.send();
}

2.2.1 ajax的POST请求方式

ajax的POST和GET的结构大体相同,但有以下三点区别

区别1:post发送数据位置是send()内,而不是拼接在url后
区别2:open的请求方式变为POST
区别3:send会原样发送数据,为确保后端能识别,必须设置数据格式为表单格式

2.2.1 ajax的POST方式封装

function ajaxPost(url, callback, data) {
    data = data || {};
    var str = "";
    for (var i in data) {
        str += `${i}=${data[i]}&`;
    }
    //不必拼接时间戳
    var xhr = new XMLHttpRequest();
    //区别2
    xhr.open("POST", url, true);
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4 && xhr.status == 200) {
            callback(xhr.responseText);
        }
    }
    //区别3:发送前设置数据格式
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    //区别1:数据发送在send内
    xhr.send(str);
}

原文地址:https://www.cnblogs.com/mutuo/p/11609808.html

时间: 2024-10-10 15:31:48

最详细的原生js实现ajax的封装的相关文章

通过原生js的ajax或jquery的ajax获取服务器的时间

在实际的业务逻辑中,经常是与时间相关的,而前端能获得的时间有两个:客户端的时间,服务器的时间.客户端时间通过 javascript中的Date对象可以获取,如 Java代码   var dt = new Date(); var tm = dt.getTime(); 那么tm就是客户端的时间,另外也可以通过对应的getFullYear(),getMonth(),getDate()取到对应的年月日等...但这个时间可靠吗?好吧,那取服务器时间吧经常用到的是后台写一个php,jsp,cgi,asp..

原生JS实现Ajax及Ajax的跨域请求

  前  言          如今,从事前端方面的程序猿们,如果,不懂一些前后台的数据交互方面的知识的话,估计都不太好意思说自己是程序猿.当然,如今有着许多的框架,都有相对应的前后台数据交互的方法. 而,其中,用得最多的应该苏算是JQuery的Ajax了.但是,今天,影子向大家介绍的是原生js的Ajax,及跨域请求. 一. JQuery的Ajax 首先,先回忆下JQuery的Ajax写法: $.ajax({ url: , type: '', dataType: '', data: { }, s

Ajax (Asynchronous javascript xml) 搜索框核心代码(JQuery) Ajax判断用户名存在核心代码 附:原生js的Ajax代码

前端 <script type="text/javascript"> $(function(){ $("#tid").keyup(function(){ //获取当前输入 的值 var value=$(this).val(); //偷偷摸摸发起请求 var url="${pageContext.request.contextPath }/like" var params="name="+value; //先清空下方

原生JS的Ajax技术

1.同步和异步 同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待  卡死状态 异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都可以随意做其他事情,不会被卡死 2.ajax运行原理 页面发起请求,会将请求发送给浏览器内核中的Ajax引擎,Ajax引擎会提交请求到 服务器端, 在这段时间里,客户端可以任意进行任意操作,直到服务器端将数据返回给Ajax引擎后, ajax引擎会监听到ajax的状态改变,触发你设置的事件,从而执行自定义的js逻辑代码完成某种页

原生js中用Ajax进行get传参

原生js中用Ajax进行get传参 案例: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> input{ width:600px; height:50px; display:block; } </style> </head> <body> <input ty

[javascript]原生js实现Ajax

一.首先看JQuery提供的Ajax方法: $.ajax({ url: , type: '', dataType: '', data: { }, success: function(){ }, error: function(){ } }) 二.原生js实现Ajax方法: var Ajax={ get: function(url, fn) { // XMLHttpRequest对象用于在后台与服务器交换数据 var xhr = new XMLHttpRequest(); xhr.open('GE

原生js实现ajax封装

一.什么是ajax? 定义:Ajax(Asynchronous Java and XML的缩写)是一种异步请求数据的web开发技术,在不需要重新刷新页面的情况下,Ajax 通过异步请求加载后台数据,并在网页上呈现出来. 作用:提高用户体验,减少网络数据的传输量 二.ajax常见运用场景 表单验证是否登录成功.百度搜索下拉框提示和快递单号查询等等. 三.Ajax原理是什么 Ajax请求数据流程,其中最核心的依赖是浏览器提供的对象xhr,它扮演的角色相当于秘书,使得浏览器可以发出HTTP请求与接收H

使用原生js写ajax

// 使用原生js 封装ajax // 兼容xhr对象 function createXHR(){ if(typeof XMLHttpRequest != "undefined"){ // 非IE6浏览器 return new XMLHttpRequest(); }else if(typeof ActiveXObject != "undefined"){ // IE6浏览器 var version = [ "MSXML2.XMLHttp.6.0"

原生JS实现Ajax的跨域请求

原生JS如何实现Ajax的跨域请求? 在解决这个问题之前,我们务必先清楚为什么我们要跨域请求,以及在什么情况下会跨域请求. 了解一下:"同源策略",你就知道了: 同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互.这是一个用于隔离潜在恶意文件的关键的安全机制. 它的定义是: 一段脚本向后台请求数据,只能读取属于同一协议名.同一主机名.同一端口号下的数据: 所以,请求不同协议名.不同端口号.不同主机名下面的文件时, 将会违背同源策略,无法请求成功,需要进行跨越处理!!