Ajax原生XHR对象

前端学了有一段时间了,在项目中我通常使用的都是jQuery封装好的Ajax函数($.ajax、$.get、$.post),使用非常的简单方便,但为了更清楚的了解Ajax,需要学习原生xhr对象。

先来明确什么是Ajax,Ajax:“Asynchronous JavaScript and XML”,翻译过来就是异步JavaScript和XML。

Ajax是一种用于创建快速动态网页的技术,通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新。意味这可以再不重新加载整个网页的情况下,对网页的某部分进行更新。

创建Ajax:

要创建Ajax,主角是XMLHttpRequest(下简称XHR)对象。

第一步:创建XHR对象

var xhr = new XMLHttpRequest();

第二步:向服务器发送请求

方法:open(method,url,async) 和 send(string)

open()方法传入三参数

  • method:请求的类型(GET/POST)
  • url:文件在服务器上的位置
  • async:布尔值,true表示异步,false表示同步(可选,默认为true)

send()方法将请求发送到服务器,有一个可选的参数string,仅用于POST类型的请求。

这里主要讨论一下async参数,XMLHttpRequest对象如果要用于AJAX的话,其open()方法的async参数必须设置为true。那如果参数设置为false会有什么样的后果呢?同步请求的后果是:JavaScript会等到服务器响应就绪才继续执行。如果是比较大型的请求或者服务器处于繁忙状态,应用程序会挂起或停止。简单点说就是页面会一直卡到响应内容回来才继续运行。

在发送GET请求的时候,可能得到缓存的信息(IE中),导致我们发送的异步请求不能正确的返回我们想要的最新的数据。

方法一:在url中添加一个唯一的ID:(随机数)

1 xhr.open("GET","demo.asp?t=" + Math.random(),true);
2 xhr.send();

这种方式可以避免拿到缓存中的旧消息,但它的每次请求仍然会被浏览器缓存起来,占用浏览器资源。

方法二:用setRequestHeader(header,value)方法向请求添加HTTP头。(关于setRequestHeader在后面讨论)

1 xhr.open("GET","demo.asp",true);
2 xhr.setRequestHeader("If-Modified-Since","0");  //设置浏览器不使用缓存
3 xhr.send();

GET中的url可以拼接字符串从而达到传参,而传送数据一般用POST。

如果我们用POST方法向服务器发送数据,应该这样设置http头。

1 xhr.open("POST","postdemo.asp",true);
2 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");  //否则数据无法被正常接收
3 xhr.send("name=amie");  //send里写要发送的数据

第三步:服务器响应

XMLHttpRequest对象的responseText和responseXML属性分别获得字符串形式的响应数据和XML形式的响应数据

可以在控制台里输出响应

console.log(xhr.responseText);

还有三个关于响应状态的属性也经常用到:

  • readyState:存有XMLHttpRequest的状态。XHR对象会经历5种不同的状态
    • 0:请求未初始化(new完后);
    • 1:服务器连接已建立(对象已创建并初始化,尚未调用send方法);
    • 2:请求已接收;
    • 3:请求处理中;
    • 4:请求已完成,响应就绪;
  • status:(HTTP状态码很多,请自行了解,举例常见的)
    • 200:请求成功
    • 404:未找到页面
  • onreadystatechange:存储函数(或函数名),每当readyState属性改变时,就会调用该函数。

因此上面那行代码可以改为:

1 xhr.onreadystatechange = function () {
2     if (xhr.readyState == 4 && xhr.status == 200) {
3     console.log(xhr.responseText);
4 };

关于setRequestHeader

在HTTP协议里,客户端向服务器请求某个网页的时候,需要发送一个HTTP协议的头文件,而XMLHttp就是通过HTTP协议去的网站上的文件数据的,所以也要发送HTTP头给服务器。

发送请求时会默认发一个头文件,如果我们需要修改或添加参数,就需要用到setRequestHeader方法。

Ps:

1.响应头包含了许多信息,有兴趣的小伙伴可以去了解一下。(HTTP涉及了许多计算机网络的知识)。

2.查看http请求头可以到开发者工具里的Network里查看。

(写在结尾:前端新人一枚~欢迎大家指出错误,谢谢阅览~)

时间: 2024-10-17 23:23:47

Ajax原生XHR对象的相关文章

转:AJAX中xhr对象详解

XJAX ,并不是一种新技术的诞生.它实际上代表的是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用. 它包括: 使用XHTML和CSS标准化呈现: 使用DOM实现动态显示和交互: 使用XML和XSLT进行数据交换与处理: 使用XMLHttpR XJAX ,并不是一种新技术的诞生.它实际上代表的是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用. 它包括: 使用XHTML和CSS标准化呈现: 使用DOM实现动态显示和交互: 使用XML和XSLT进行数据交换与处理: 使用XMLHt

Ajax原生请求和java对象转成json

\黑马程序员_超全面的JavaWeb视频教程vedio\黑马程序员_超全面的JavaWeb教程-源码笔记\JavaWeb视频教程_day23-资料源码\ajax_code\day23_3 本代码中有模拟 jquery里面的对Ajax的简化封装: json2.jsp  Ajax原生请求 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@

【技术】使用原生XHR(XMLHttpRequest)对象来获取并包括HTML片段

1. 创建文件名为“someResource”的文件(文件无后缀),文件类型:文件,在文件夹中如下图: "someResource"文件代码: <b>This is the content of resource <tt>someResource</tt></b> 2. HTML代码: <!DOCTYPE html><html>  <head>    <title>使用原生XHR来获取并包括

Ajax原生的js(XMLHttpRequest对象)--实现局部刷新

AJAX 是一种用于创建快速动态网页的技术.(不用刷新整个页面和服务器通讯的方法 ) XMLHttpRequest对象:是对js的扩展,可以实现网页与服务器进行通信,通常把Ajax当做XMLHttpRequest对象的代名词. 客户端的语言一般是HTML,css,JavaScript:服务器端一般用PHP,jsp,ASP:中间传输的格式一般为HTML,xml,TXT,json:传输协议是http ajax需要某种格式化的格式在服务器和客户端之间传递信息,XML,JSON是常用的格式 DOM实现动

什么是Ajax与Ajax原生的实现方式

一.什么是Ajax? Aiax:异步的Javascript和XML. 作用:用于完成局部刷新 XML是用于数据传输,现在开始被JSON所替代. 1.1.交互方式问题 传统的交互方式每次都必须返回整个页面,宽带,响应速度都有影响的, Ajax的交互方式是从 客户端(浏览器)从服务器加载网页完毕后,网页中的内容如果需要更改,不使用浏览器发送请求,而是使用JavaScript中的XMLHttpRequest(及Ajax对象)对象发送请求到服务器,服务器接收请求并处理完毕后只返回页面需要的内容,XMLH

AJAX之XHR

AJAX工作流程 1.create XHR 2.xhr.open(method, url, async) 3.xhr.onreadystatechange 4.xhr.send() XHR对象 AJAX技术的核心是XMLHttpRequest对象(简称XHR),IE(6789+).chrome.firefox.safari都支持XHR对象: 使用XHR首页要创建它: 1 var xhr = new XMLHttpRequest() 兼容IE67的写法: 1 var xhr = new (wind

异步交互之Ajax原生编写

一提到异步交互大家就会说ajax,仿佛ajax这个技术已经成为了异步交互的代名词.那下面将研究ajax的核心对象! 利用ajax实现异步交互无非4步: 1.创建ajax核心对象 2.与服务器建立连接 3.向服务器发送请求 4.接收服务器响应的数据 看似神秘的异步交互当明确这4步后,也许在大家脑海里已经有了初步的思路了 首先我们创建ajax的核心对象,由于浏览器的兼容问题我们在创建ajax核心对象的时候不得考虑其兼容问题,因为要想实现异步交互的后面步骤都基于第一步是否成功的创建了ajax核心对象.

Ajax的XMLHttoRequest对象

Ajax在我们的网页中无处不在,我们平常开发中也都会使用Ajax,可是我们对它的认识又有多少啦,又有多少人知道它的全名,又有多少人会把它当成阿贾克斯 Ajax的由来 2005年,Jesse James Garrett 介绍了一种技术,用他的话说就叫Ajax,是对Asynchronous JavaScript+XML的简写,这一技术能够向服务器请求额外的数据而无需卸载页面,会带来更好的用户体验.这一技术改变了自WEB诞生以来就一直沿用的"单击","等待的交互模式":

ajax核心技术1---XMLHttpRequset对象的使用

AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术.AJAX = 异步 JavaScript和XML(标准通用标记语言的子集).ajax是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.从今天开始nie,小编开始和小伙伴们一起学习ajax的相关知识,这篇博文,小编