原生ajax、XMLHttpRequest和FetchAPI简单描述
原生ajax、XMLHttpRequest和FetchAPI简单描述
什么是ajax
ajax的出现,刚好解决了传统方法的缺陷。AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
AJAX 不是新的编程语言,而是一种使用现有标准的新方法。AJAX 即 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。它可以在不重新加载整个页面的情况下完成与服务器交换数据并更新部分网页。
AJAX 是一种用于创建快速动态网页的技术。
通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject)。
传统方法的缺点:
传统的web交互是用户触发一个http请求服务器,然后服务器收到之后,在做出响应到用户,并且返回一个新的页面,,每当服务器处理客户端提交的请求时,客户都只能空闲等待,并且哪怕只是一次很小的交互、只需从服务器端得到很简单的一个数据,都要返回一个完整的HTML页,而用户每次都要浪费时间和带宽去重新读取整个页面。这个做法浪费了许多带宽,由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本地应用慢得多。
一个完整的AJAX请求包括五个步骤:
1.创建XMLHTTPRequest对象
2.使用open方法创建http请求,并设置请求地址
3.设置发送的数据,开始和服务器端交互
4.注册事件
5.获取响应并更新界面
这里列出get请求和post请求的例子:
get请求:
<script type="text/javascript">//请求函数function f1(){console.log('start');//1.创建AJAX对象var ajax = new XMLHttpRequest();//4.给AJAX设置事件(这里最多感知4[1-4]个状态) ajax.onreadystatechange = function(){//5.获取响应//responseText 以字符串的形式接收服务器返回的信息//console.log(ajax.readyState);if(ajax.readyState == 4 && ajax.status == 200){var msg = ajax.responseText;console.log(msg);//alert(msg);var divtag = document.getElementById('result');divtag.innerHTML = msg;}}//2.创建http请求,并设置请求地址var username = document.getElementsByTagName('input')[0].value;var email = document.getElementsByTagName('input')[1].value;username = encodeURIComponent(username); //对输入的特殊符号(&,=等)进行编码 email = encodeURIComponent(email);ajax.open('get','response.php?username='+username+'&email='+email);//3.发送请求(get--null post--数据) ajax.send(null);}</script>
post请求:
<script type="text/javascript">//请求函数function f1(){//console.log('start');//1.创建AJAX对象var ajax = new XMLHttpRequest();//4.给AJAX设置事件(这里最多感知4[1-4]个状态) ajax.onreadystatechange = function(){//5.获取响应//responseText 以字符串的形式接收服务器返回的信息//console.log(ajax.readyState);if(ajax.readyState == 4 && ajax.status == 200){var msg = ajax.responseText;console.log(msg);//alert(msg);var divtag = document.getElementById('result');divtag.innerHTML = msg;}}//2.创建http请求,并设置请求地址 ajax.open('post','response.php');//post方式传递数据是模仿form表单传递给服务器的,要设置header头协议 ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");//3.发送请求(get--null post--数据)var username = document.getElementsByTagName('input')[0].value;var email = document.getElementsByTagName('input')[1].value;username = encodeURIComponent(username); //对输入的特殊符号(&,=等)进行编码 email = encodeURIComponent(email);var info = 'username='+username+'&email='+email; //将请求信息组成请求字符串 ajax.send(info);}</script>
什么是XMLHttpRequest
XMLHttpRequest对象是ajax的基础,XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。目前所有浏览器都支持XMLHttpRequest
新版本的 XMLHttpRequest 对象,针对老版本的缺点,做出了大幅改进。
* 可以设置 HTTP 请求的时限。
* 可以使用 FormData 对象管理表单数据。
* 可以上传文件。
* 可以请求不同域名下的数据(跨域请求)。
* 可以获取服务器端的二进制数据。
* 可以获得数据传输的进度信息。
五步使用法:
1.创建XMLHTTPRequest对象
2.使用open方法设置和服务器的交互信息
3.设置发送的数据,开始和服务器端交互
4.注册事件
5.更新界面
下面给大家列出get请求和post请求的例子
get请求:
//步骤一:创建异步对象 var ajax = new XMLHttpRequest(); //步骤二:设置请求的url参数,参数一是请求的类型,参数二是请求的url,可以带参数,动态的传递参数starName到服务端 ajax.open('get','getStar.php?starName='+name); //步骤三:发送请求 ajax.send(); //步骤四:注册事件 onreadystatechange 状态改变就会调用 ajax.onreadystatechange = function () {if (ajax.readyState==4 &&ajax.status==200) {//步骤五 如果能够进到这个判断 说明 数据 完美的回来了,并且请求的页面是存在的console.log(ajax.responseText);//输入相应的内容} }
post请求:
//创建异步对象 var xhr = new XMLHttpRequest(); //设置请求的类型及url //post请求一定要添加请求头才行不然会报错 xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");xhr.open('post', '02.post.php' ); //发送请求 xhr.send('name=fox&age=18'); xhr.onreadystatechange = function () {// 这步为判断服务器是否正确响应if (xhr.readyState == 4 && xhr.status == 200) {console.log(xhr.responseText);} };
为了方便
function ajax_method(url,data,method,success) {// 异步对象var ajax = new XMLHttpRequest();// get 跟post 需要分别写不同的代码if (method=='get') {// get请求if (data) {// 如果有值url+='?';url+=data;}else{}// 设置 方法 以及 url ajax.open(method,url);// send即可 ajax.send();}else{// post请求// post请求 url 是不需要改变 ajax.open(method,url);// 需要设置请求报文ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");// 判断data send发送数据if (data) {// 如果有值 从send发送 ajax.send(data);}else{// 木有值 直接发送即可 ajax.send();}}// 注册事件ajax.onreadystatechange = function () {// 在事件中 获取数据 并修改界面显示if (ajax.readyState==4&&ajax.status==200) {// console.log(ajax.responseText);// 将 数据 让 外面可以使用// return ajax.responseText;// 当 onreadystatechange 调用时 说明 数据回来了// ajax.responseText;// 如果说 外面可以传入一个 function 作为参数 success success(ajax.responseText);}}}
案例:简单使用Idea创建三层架构项目和数据库连接(使用原生ajax进行访问+ajax)
简单介绍Fecth
Fetch 是浏览器提供的原生 AJAX 接口。
由于原来的XMLHttpRequest不符合关注分离原则,且基于事件的模型在处理异步上已经没有现代的Promise等那么有优势。因此Fetch出现来解决这种问题。
Fetch API 提供了能够用于操作一部分 HTTP 的 JavaScript 接口,比如 requests 和 responses。它同时也提供了一个全局的 fetch() 方法——能够简单的异步的获取资源。
使用 window.fetch 函数可以代替以前的 $. ajax、$.get 和 $.post。
Fetch接口
Fetch 提供了对 Request 和 Response 等对象通用的定义。
发送请求或者获取资源,需要使用 fetch() 方法。
处理 JSON响应
假设需要请求 JSON —— 回调结果对象 response 中有一个json()
方法,用来将原始数据转换成 JavaScript 对象:
fetch('https://davidwalsh.name/demo/arsenal.json').then(function(response) { // 转换为 JSONreturn response.json(); }).then(function(j) {// 现在, `j` 是一个 JavaScript object console.log(j); });
这很简单 , 只是封装了 JSON.parse(jsonString)
而已, 但 json
方法还是很方便的。
处理基本的Text / HTML响应
SON 并不总是理想的请求/响应数据格式, 那么我们看看如何处理 HTML或文本结果:
fetch('/next/page').then(function(response) {return response.text();}).then(function(text) { // <!DOCTYPE .... console.log(text); });
如上面的代码所示, 可以在 Promise 链式的 then
方法中, 先返回 text()
结果 ,再获取 text
处理Blob结果
通过 fetch 加载图像或者其他二进制数据, 则会略有不同:
fetch('flowers.jpg').then(function(response) {return response.blob();}).then(function(imageBlob) {document.querySelector('img').src = URL.createObjectURL(imageBlob);});
响应 Body mixin 的 blob()
方法处理响应流(Response stream), 并且将其读完
提交表单数据(Posting Form Data)
另一种常用的 AJAX 调用是提交表单数据 —— 示例代码如下:
fetch('/submit', {method: 'post',body: new FormData(document.getElementById('comment-form')) });
提交 JSON 的示例如下:
fetch('/submit-json', {method: 'post',body: JSON.stringify({email: document.getElementById('email').valueanswer: document.getElementById('answer').value}) });
缺点
- 使用 fetch 无法取消一个请求。这是因为 Fetch API 基于 Promise,而 Promise 无法做到这一点。
- 由于 Fetch 是典型的异步场景,所以大部分遇到的问题不是 Fetch 的,其实是 Promise 的。
简单介绍就到这里
概念和用法详细:https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API
原生ajax、XMLHttpRequest和FetchAPI简单描述相关推荐
- 原生ajax XMLHTTPRequest()
原生ajax XMLHTTPRequest() 视频 https://www.bilibili.com/video/BV1WC4y1b78y?p=10 代码 <!DOCTYPE html> ...
- 原生ajax+php上传图片的简单实现
前端 <input type="file" onclick="updown" accept="image/png,image/gif" ...
- Ajax(jQuery封装),表单form提交(Ajax),art-template模板引擎,原生Ajax,XML和JSON,axios,跨域和JSONP,防抖和节流,HTTP协议
目录 服务器基本概念 1.URL 2.URL地址的组成部分 3. 图解客户端与服务器的通信过程 4.网页中如何请求数据 5.资源的请求方式 Ajax jQuery中的Ajax 1. $.get()函数 ...
- 如何快速入门Ajax(学习笔记)—— 原生ajax、jQuery、axios
如何快速入门Ajax 1. 服务器的基本概念 客户端与服务器 URL地址 网页中如何请求数据 资源的请求方式 2. 了解Ajax Ajax是什么 Ajax的应用场景 3. jQuery中的Ajax g ...
- 实现jquery.ajax及原生的XMLHttpRequest调用WCF服务的方法
废话不多说,直接讲解实现步骤 一.首先我们需定义支持WEB HTTP方法调用的WCF服务契约及实现服务契约类(重点关注各attribute),代码如下: //IAddService.cs namesp ...
- 封装原声ajax,原生AJAX封装的简单实现
回归下原生js,网上看到的AJAX封装,遂拿来改改,不知还有何弊端,望指出! var ajaxHelper = { /*1.0 浏览器兼容的方式创建异步对象*/ makeXHR: function ( ...
- Ajax→异步的JavaScript和XML、HTTP请求响应、Ajax简介同步异步、XMLHttpRequest类的方法及属性、原生Ajax、Koa实现Ajax、接口文档、浏览器同源策略、反向代理
浏览器服务器 HTTP请求响应 数据库后端语言 Ajax简介同步异步 Koa前端框架 XMLHttpRequest类的方法及属性 原生Ajax Koa实现Ajax JSON DOM 接口文档 浏览器同 ...
- 理解ajax技术,封装原生 ajax请求
一.Ajax 概述 Ajax 是 Asynchronous Javascript And XML 的简写 Ajax是一门技术,并不是一门语言 使用XHTML+CSS来标准化呈现 使用XML和XSLT进 ...
- 原生ajax如何执行,原生ajax调用数据实例讲解
由于jQuery的盛行,现在使用较多的是jQuery封装好了的ajax,因为解决了浏览器兼容性问题,这对程序员来说就等于去掉了一个心头大患,但并非原生ajax就销声匿迹,并且本人感觉还是对原生的aja ...
- js原生ajax写法
博主在大二做数据库课设时,接触的js. 边学边做,当时还没接触ajax,所以在遇到每次请求地址都会刷新这个问题时, 博主干了你们绝对想不到的事:在页面里用了很多"隐形"的frame ...
最新文章
- utf-8 编码出现空白
- 哇靠靠,这也行?零基础DIY无人驾驶小车(三)
- Vue CLI 3开发中屏蔽烦人的EsLint错误
- 前后端分离工程实现 (VUE、JAVA)、附全部源码
- 试论述计算机辅助教学的特点,浅谈计算机辅助教学特点
- 拓端tecdat|R语言实现LDA主题模型分析网购数据
- 从0开始学习WBE前端
- 详解CAN总线:常用CAN连接器的使用方法
- 花生壳域名绑定动态IP原理浅析
- 4和2大于号小于号箭头那边_小于号怎么打键盘(大于小于号怎么区分)
- 写给初中级前端的高级进阶指南
- 华为/华三交换机配置NTP时钟同步
- 互联网和大数据是什么意思_数据化和互联网行业 互联网大数据什么意思
- C++ 中transform方法的疑惑和自己的感受
- Qt开发技术:Qt富文本(三)Qt支持的HTML子集(查询手册)以及涉及的类
- Android面试知识库,线程和进程的区别【Android面试送命题】
- adminLTE框架chart图表的使用
- k8s暴露端口的方式
- access怎么查询工龄_计算机二级Access数据库查询的功能教程
- win10系统下安装打印机驱动
热门文章
- 使用Python从头开始实现基线机器学习算法
- 文本分类的python实现-基于Xgboost算法
- 考研算法语言C,2017年华南理工大学硕士研究生算法语言(C)考试大纲
- arcgis热点分析_地理信息系统导论学习笔记(11)——矢量数据分析
- C++ 从函数参数中获取指针 指针传递
- chainmaker go.mod no such file or directory
- 微信小程序云开发教程-小程序代码发布和上线运行
- 微信小程序云开发教程-JavaScript入门(1)-学习环境、函数、调试
- 设计模式之GOF23中介者模式
- 针式打印机打印发虚_针式打印机使用技巧