关于ajax的js写法初探

纯JavaScript实现Ajax的完整示例 本文还有配套的精品资源,点击获取 简介:Ajax技术通过异步请求背景数据交换,实现网页的局部刷新,核心依赖于JavaScript。本文详细介绍了使用纯JavaScript实现Ajax的关键步骤,包括创建XMLHttpRequest对象、初始化、设置响应处理函数、发送请求及处理响应数据。通过这些步骤,开发者能够通过不依赖额外库或框架的方式,提升网页交互体验。示例代码展示了如何... 阅读详情

以前项目中一直在使用$.ajax进行异步请求,今天同事问我会不会原生ajax,那还用问嘛,可他说:"不对不对,再深一层"...

然后我就怀着好奇心与惭愧心(因为真的没想到过啊)到网上取经来了...

现在把核心点整理出来,记录在案吧

首先说明ajax不是一门语言,而是用已存在的知识整合而成的一种框架

ajax能够实现与服务器的数据交互,并且对网页进行部分刷新(不必重新加载整个页面)

XMLHttp是ajax的基础,ajax封装的就是它的功能,所以了解了XMLHttp,就能更好的使用ajax,更能够对前台如何向后台发起请求有直观的了解(因为你能看到很多请求、响应状态的参数,和许多它的属性及方法,如若灵活使用,必能如臂使指)。

XMLHttp是什么,可以说它是一套API,提供了客户端到http服务器端通讯的协议。客户端可以通过XMLHttp对象向http服务器端发送请求,并用DOM(document object model文档对象模型)来接受处理响应。

那剥开这层封装,该怎么用XMLHttp来实现呢,直接看代码:

js代码:

//这个是创建XMLHttp对象的方法,独立到所有方法之外,每次向后台请求时被调用
  function createXMLHttp(){
    var XMLHttp = null;
    //因为浏览器不同使用的请求对象也不同,所以要判断到底该用那种请求对象
    //IE7+, Firefox, Chrome, Opera, Safari 浏览器
    if(window.XMLHttpRequest){
       XMLHttp = new XMLHttpRequest();
    }else{
      //IE6, IE5 浏览器
      XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    return XMLHttp;
  }
  ​
  //有了XMLHttp对象以后,就可以通过它进行对后台的请求了
  function list(){
      var XMLHttp = createXMLHttp();
      //见名识意,这是XMLHttp的‘当状态改变时’触发的函数,那么如果状态不变,自然不会触发它                 
      XMLHttp.onreadystatechange = function(){
          //readyState是XMLHttp的状态,代表客户端这边对于请求这件事做到了哪一部分了
          //status是服务端返回给客户端的状态,告知客户端咱们之间的接下来还要做什么
          //这两种属性,我会在文末全部列举出来,便于参考记忆
          if(XMLHttp.readyState == 4 && XMLHttp.status == 200){
              //这里写的就是响应回来后,前台需要进行的操作
              //html代码见下面
              var target = document.getElementById("divv");
              //响应信息放在responseText里,是个字符串
              //innerHTML设置或者返回元素的内容
              target.innerHTML = XMLHttp.responseText;
        }
      }
  /*  创建一个新的http请求,参数为请求类型(post/get),请求的地址(url),是否同步(async)
       XMLHttp.open(method,url,async);
       发送请求到http服务器并接收回应,send()里可以放string类型,仅用于post请求的方式
       XMLHttp.send();
       注意:如果使用的是同步(async那里是false),就不要写onreadystatechange()方法了,直接将后续代码写在send()后面
  */ 
      
       //如果用get的方式,想要传的参数,直接放到url后面,send()里就不用放东西了
       XMLHttp.open("get","/list?userName=YHY&pwd=123",true);
       XMLHttp.send();
  
      
      //如果用post的方式,参数写在send()里,注意是string类型
      XMLHttp.open("post","/list",true);
      //单独指定请求的某个http头,post方式需要。如果post不传值,可不写该方法
      xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");  
      //如果传值,写在这里,如果不传值,里面为空
      XMLHttp.send("userName=YHY&pwd=123");      
  } 

html代码:

<body>
    <button onclick="list();">点击我提交</button>
    <div id="divv">效果看这里</div>
</body>

点击效果为:div里面的"效果看这里",变更为了从后台获取过来的数据,注意是"变更"而不是"追加",如果想达到追加的效果,如下:(看起来像不像字符串追加)

var target = document.getElementById("divv");
target.innerHTML = target.innerText + "新值放这里";
以上,如果服务器响应回来的,是个字符串,那么并无不可;但如果想用js的ajax获取对象的集合呢?响应回来的json怎么解析? 还用上述办法没问题,只不过显示到用户眼前的就是个json数组了,都是这样的:
 [{"id":1,"userName":"YHY","pwd":"123"},
  {"id":2,"userName":"WK","pwd":"234"},
  {"id":3,"userName":"LYJ","pwd":"456"}
  ...
]
  ​

可以利用eval()方法:

var lists = eval("(" + XMLHttp.responseText +")");
  for(var i = 0; i < lists.length; i++){
      alert(lists[i].userName);
  }

结果为:分别得到YHY、WK、LYJ,效果达到。

以上讲述了js的ajax如何向后台请求、传值,分为get和post两种方式讲解;以及得到后台的响应后怎么处理携带回来的数据,分为字符串和json两种形式讲解;以及如何实现追加功能。

那么后台怎么写呢?其实和使用jquery的ajax相同:

 //如果返回的是字符串
  @RequestMapping("/list")
  public void list(HttpServletResponse response){
    response.setCharacterEncoding("UTF-8");
    try{
      response.getWriter().print("我是要传回去的字符串");
    }catch(IOException e){
      e.printStackTrace();
    }
  }
 //如果返回的是json
  @ResponseBody
  @RequestMapping("/list")
  public List<User> list(){
    List<User> list = new ArrayList<User>();
    list.add(new User(1,"YHY","123"));
    list.add(new User(2,"WK","234"));
    list.add(new User(3,"LYJ","456"));
    return list;
  }

本篇只是讲述了js的ajax简单的使用方法,要想灵活使用,还要在工作中实践才行......

 

接下来贴出那密密麻麻的状态值,小伙伴们对其中一部分应该很熟悉的:

XMLHttp的readyState值

0:请求未初始化(还没有调用 open())
1:请求已经建立,但是还没有发送(还没有调用 send())
2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)
3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成
4:响应已完成;您可以获取并使用服务器的响应了

XMLHttp的status值

100——客户必须继续发出请求 
101——客户要求服务器根据请求转换HTTP协议版本

200——交易成功 
201——提示知道新文件的URL 
202——接受和处理、但处理未完成 
203——返回信息不确定或不完整 
204——请求收到,但返回信息为空 
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件 
206——服务器已经完成了部分用户的GET请求

300——请求的资源可在多处得到 
301——删除请求数据 
302——在其他地址发现了请求数据 
303——建议客户访问其他URL或访问方式 
304——客户端已经执行了GET,但文件未变化 
305——请求的资源必须从服务器指定的地址得到 
306——前一版本HTTP中使用的代码,现行版本中不再使用 
307——申明请求的资源临时性删除

400——错误请求,如语法错误 
401——请求授权失败 
402——保留有效ChargeTo头响应 
403——请求不允许 
404——没有发现文件、查询或URl 
405——用户在Request-Line字段定义的方法不允许 
406——根据用户发送的Accept拖,请求资源不可访问 
407——类似401,用户必须首先在代理服务器上得到授权 
408——客户端没有在用户指定的饿时间内完成请求 
409——对当前资源状态,请求不能完成 
410——服务器上不再有此资源且无进一步的参考地址 
411——服务器拒绝用户定义的Content-Length属性请求 
412——一个或多个请求头字段在当前请求中错误 
413——请求的资源大于服务器允许的大小 
414——请求的资源URL长于服务器允许的长度 
415——请求资源不支持请求项目格式 
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请 求也不包含If-Range请求头字段 
417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求

500——服务器产生内部错误 
501——服务器不支持请求的函数 
502——服务器暂时不可用,有时是为了防止发生系统过载 
503——服务器过载或暂停维修 
504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长 505——服务器不支持或拒绝支请求头中指定的HTTP版本

1xx:信息响应类,表示接收到请求并且继续处理 
2xx:处理成功响应类,表示动作被成功接收、理解和接受 
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理 
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行 
5xx:服务端错误,服务器不能正确执行一个正确的请求

XMLHttp对象的属性与方法

属性:*表示此属性是W3C文档对象模型的扩展.

onreadystatechange*     指定当readyState属性改变时的事件处理句柄,只写
readyState              返回当前请求的状态,只读
responseBody            将回应信息正文以unsigned byte数组形式返回,只读
responseStream          以Ado Stream对象的形式返回响应信息,只读
responseText            将响应信息作为字符串返回,只读
responseXML             将响应信息格式化为Xml Document对象并返回,只读
status                  返回当前请求的http状态码,只读
statusText              返回当前请求的响应行状态,只读

方法:

abort                    取消当前请求
getAllResponseHeaders    获取响应的所有http头
getResponseHeader        从响应信息中获取指定的http头
open                     创建一个新的http请求,并指定此请求的方法、URL以及 验证信息(用户名/密码)
send                     发送请求到http服务器并接收回应 
setRequestHeader         单独指定请求的某个http头

参考博客

https://blog.youkuaiyun.com/qq_38238041/article/details/82914404                                                                                                          小伙伴们可以依据本篇原理,自行封装ajax,既对ajax的学习有帮助,又对js的封装有很大借鉴作用                                                      

http://www.w3school.com.cn/jsref/jsref_eval.asp                                                                                                                             对于eval()方法的阐述

避开封号风险!wxauto+Claude API实现微信智能客服的合规方案 本文详细介绍了如何利用wxauto和Claude API构建合规的微信智能客服系统,避免封号风险。通过技术选型对比、防封策略设计及大模型接入实践,为企业提供了一套安全高效的解决方案,特别适合中小企业在微信生态中部署AI客服。 阅读详情

相关推荐

星网宇达Newton-M2设备安装及配置

主要介绍了星网宇达Newton-M2设备的配置过程

weixin_49353445的博客 2676

Ajax的三种写法(最原始的写法+最常用的写法+最简便的写法)

AJAX:Asynchronous JavaScript AND XML 定义:浏览器向服务器发送的异步请求(不改变页面的情况下,发送的变化) 核心:浏览器向服务器发送异步请求,javascript中提供xmlHttpRequest对象,这个是核心对象,来发送异步请求 最简写法:jQuery 书写ajax的步骤: 1,创建对象: new xmlHttpRequ...

Ace_2的博客 1万+

什么是PMOS?什么是NMOS?两者有什么区别?

这个电压差被称为阈值电压(Vth),通常为0.7V至2V(低压NMOS)或4V至10V(功率NMOS)。当Vgs(栅极-源极电压)大于Vth时,沟道中的电子被吸引到栅极下方,形成导电通路,使电流可以从漏极流向源极。NMOS与PMOS的结构类似,都由三大部分组成:栅极(Gate)、源极(Source)和漏极(Drain)。由于NMOS在开启时,电子是主要的载流子,电子的迁移率比空穴高,因此NMOS通常具有更低的导通电阻(Rds(on)),这使其成为高速开关电路中的首选。它的沟道由电子(负载子)传导。

硅农深芯的博客 6437

如何在js中写ajax,js如何编写简单的ajax方法库

本文实例为大家分享了js编写ajax方法库的具体代码,供大家参考,具体内容如下具体代码~function(){//ajax:实现ajax请求的公共方法;当一个方法传递的参数过多,而且还不固定,我们使用对象统一传值法(把需要传递的参数值都放在一个对象中,一起传递进去即可)function ajax(options){//把需要使用的参数值设定一个规则和初始值var _default = {url:"...

weixin_35123047的博客 1606

Loupe Browser实战指南:解锁10xGenomics单细胞数据的可视化奥秘

本文提供了Loupe Browser的实战指南,帮助用户无需编程即可探索和可视化10xGenomics单细胞数据。文章详细介绍了从数据导入、界面导航到细胞亚群鉴定、差异基因分析的核心操作流程,并分享了高级技巧与避坑指南,是快速上手这一强大可视化工具的必备参考。

weixin_29313423的博客 206

Hierarchical Flow Partition(Top-down&&Bottom-up)

hierarchy flow是将设计切分成多个block,分别处理单个block,然后完成后,将它们进行拼接以完成最终的chip。一般划分为三个阶段:chip planning;physical budget就是pin assignmenthierarchy flow实现的方法有两种,一种是top-down,另一种是bottom-up,无论是哪种,都是都要通过flatten的方法分别全局范围进行优化实现。

qq_39493558的博客 3072

js-ajax(js)

一、Ajax概述 1.什么是同步,什么是异步 同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待卡死状态(不能进行其他操作) 异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都可以随意做其他事情,不会被卡死(可以进行其他操作) 2.Ajax的运行原理 页面发起请求,会将请求发送给浏览器内核中的Ajax引擎,Ajax引擎会提...

muzidigbig的博客 3784

微信商家转账报错“当前使用用户过多,请稍后重新确认收款”解决方案

当前使用用户过多,请稍后重新确认收款”这个错误,其实就是典型的参数误处理导致的假报错。记住一句话就行👇JSAPI 场景下的package参数不要做 UrlEncode。如果你也遇到这个问题,希望这篇文章能帮你少踩一个坑。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 784

javascript的ajax

(域名):443(端口号)/course/list(路径)协议、域名、端口号,任何一个不一样,就是不同域与路径无关,路径一不一样无所谓不同域同域。

我管它叫“知勤者笔记”,主要用来记录和分享我的日常生活与学习经历 5482

第二章:创建交互式地图

那么您应该已经有了一个安装了这些包的 conda 环境。否则,您需要创建一个新的 conda 环境并使用以下命令安装。

韩天放 4217

UNet改进(24):注意力机制-从基础原理到高级融合策略

本文系统探讨了如何通过引入各类注意力机制增强UNet在医学图像分割中的性能。文章分为基础篇、进阶篇和高级篇三个层级:基础篇介绍了时序注意力、可变形注意力、分层注意力等8种基础机制;进阶篇提出了5种混合注意力设计;高级篇则探讨了全局+局部+多尺度等复杂组合机制。实验表明,这些注意力模块在心脏MRI、肺部感染等任务中能提升2-15%的分割精度。文章还提供了硬件适配建议和完整实现代码,为研究者提供了全面的技术参考。未来方向包括NAS优化、量子注意力等前沿探索,为UNet在医疗影像等领域的应用革新提供了理论指导。

2501_91516851的博客 764

Ajax 请求的三种写法

Ajax 请求简介: Ajax即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术 ajax技术的目的: 是让js发送http请求,实现与服务端通信,即数据交互 ajax的两个主要好处: 异步请求 局部刷新(无刷新) 数据接口: 数据接口是后台提供的...

Nick.Peng's Blogs 7888

3、数据导入与清洗:Excel、SQL、SPSS、Stata和SAS数据处理

本文详细介绍了如何从Excel文件、SQL数据库以及SPSS、Stata和SAS等统计软件中导入和清洗数据。针对不同数据来源的特点,提供了具体的处理方法,包括跳过无用行、重命名列、处理缺失值、转换数据类型、保留元数据等关键步骤。同时,通过实际应用案例展示了如何整合多源数据,并总结了数据导入和清洗的最佳实践,帮助读者高效完成数据预处理工作,为后续的数据分析打下坚实基础。

134

JS ajax 例子

用 js , jQuery 编写 ajax 的样式,三种写法,例子: //用 js 原生写法 function sendGet(url){ xhr.onreadystatechange =function(){ if(xhr.readyState == 4 && xhr.status == 200){ //获取服务器响应 document...

qq_34851243的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

js原生ajax写法

博主在大二做数据库课设时,接触的js。边学边做,当时还没接触ajax,所以在遇到每次请求地址都会刷新这个问题时,博主干了你们绝对想不到的事:在页面里用了很多“隐形”的frame来阻止当前页面的刷新。其实当时博主听身边的大佬提起过ajax,当时以为很难,而且课设时间又紧就没有学习ajax.直到大三上了web课,发现ajax原来如此简单。相信我,看了这篇博客,你也能学会使用ajax进行异步通信。下面贴...

qq_34568169的博客 2421

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ajax标准完整写法

ajax 标准写法 $.ajax({ url:"http://www.microsoft.com", //请求的url地址 dataType:"json", //返回格式为json async:true,//请求是否异步,默认为异步,这也是ajax重要特性 data:{"id":"value"}, //参数值 type:"GET", ...

坚持去坚持。 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ajax请求有多少种写法,Ajax 请求的三种写法

Ajax 请求简介:Ajax即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种建立交互式网页应用的网页开发技术javascriptajax技术的目的:是让js发送http请求,实现与服务端通讯,即数据交互ajax的两个主要好处:异步请求局部刷新(无刷新)数据接口:数据接口是后台提供的,是一个url地址,经过访问该url,实现对...

weixin_33433927的博客 2454

JavaScript AJAX 库

以下是 AJAX 中常用的函数。该buildFormData函数返回一个FormData对象或一个由表单对象构建的字符串,用于帖子正文(data:函数ajax()请求对象)。这是一个简单的Node.js服务器,它提供静态文件并回显发布到它的数据。该ajax函数调用请求对象的方法函数(如果指定)并传入上传完成的百分比,以便为用户显示进度指示器。这是使用后面的 AJAX 库 (ajaxlib.js) 的上述文件。这就是没有库来简化它的 AJAX 的样子。以下是使用上述 AJAX 库的示例代码。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 1万+

jQuery与JS与ajax三者的区别以及js原生ajax与jquery的ajax的用法区别

jQuery与JS与ajax三者的区别 总结: 1、JS是一门前端语言。 2、Ajax是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新。 3、jQuery是一个框架,它对JS进行了封装,使其更方便使用。jQuery使得JS与Ajax的使用更方便 关系比喻: 若把js比作木头,那么jquery就是木板(半成品) jQuery与ajax都是js的一个...

javascript_meng的博客 3847

ajax 基本写法,Ajax基本写法

Insert title herevar xhr=initAjax();function initAjax(){if(window.XMLHttpRequest){return new XMLHttpRequest();}else if(window.ActiveXObject){try{return new ActiveXObject("Msxml2.XMLHttp");}catch(e){tr...

weixin_31040629的博客 524

Ajax异步交互原理,Jquery写法和js写法

目录Ajax异步交互什么是AJaxAjax有什么作用Ajax原理实现--> 用js代码实现解析知识点 (get and post 提交)对应案例:Ajax用户名校验Ajax实现原理-->jquery实现解析知识点(get & post 提交 & load()加载)对应案例1:仿百度提示对应案例2:省市联动 前言 — 继续加油吧,争取完成每天的任务! Ajax异步交互 ...

weixin_44142032的博客 1257

原生js的ajax请求兼容写法

今天就整理一下原生js的ajax请求兼容写法,如有不对之处欢迎指出~~~ //创建ajax的兼容写法 function createXHR() { var req = null; if(window.XMLHttpRequest) { req = new XMLHttpRequest(); } else { req = new ActiveXObje

becauseof_11的博客 4640

原生AJAX写法

虽然现在很多JS的框架提供了AJAX的调用方法,我们甚至不用去了解其具体的实现原理就可以直接调用了,但是我认为不去从最基础的层面了解一个东西,就很难做到最好。 var XHR=null; if (window.XMLHttpRequest) { // 非IE内核 XHR = new XMLHttpRequest();

笔心 3万+

前端js基础写法

0 背景 本人后端开发,前端小白,因项目需要学习了一些关于angularJs的前端语法。后又因项目缘故,学习基础js写法和ajax请求。这里分享一些js常用的写法(主要关于交互)。 1 href href是调用后端接口最简单的写法 在html里 在js里 ...

wangyan_z的博客 1667

Ajax案例 一共四种写法

Js原生ajax 步骤 1、创建一个XMLHttpRequest;核心对象 2、通过这个核心对象打开请求open 3、通过这个核心对象发送请求 4、通过这个核心对象接收返回数据 01-Js-ajax.jsp 前台页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"...

weixin_41345933的博客 417

两种Ajax写法

Ajax:(Asynchronous Javascript And XML)简称为异步的js和xml js中有两种写法: //原生js写法 function show(){ var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ if(xhr.readyState==4&amp;&amp;xhr.status==200){ ...

weixin_44003190的博客 486
上一篇: 关于JDK动态代理的自我理解
下一篇: SpringBoot自动配置原理初探
SaMo_Hello
博客等级 码龄9年 3粉丝 4原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值