ajax的技术核心,ajax技术的核心内容:XMLHttpRequest对象详解

2023-10-28

XMLHttpRequest对象是Ajax技术最核心内容,所有现代浏览器均支持XMLHttpRequest对象,XMLHttpRequest用于在后台与服务器交换数据,这意味着可以再不重新加载整个网页的情况下,对网页的某部分进行更新。下面分析XMLHttpRequest对象的基本知识。

1、创建XMLHttpRequest对象

在不同的浏览器中创建XMLHttpRequest对象的方法不同,其中,IE创建XMLHttpRequest对象的方法如下所示:

//使用较新版本的IE创建IE兼容的对象(Msxml2.XMLHTTP) var xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); //使用较老版本的IE创建IE兼容的对象(Microsoft.XMLHTTP) var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

而在Mozilla、Opera、Safari和大部分非IE浏览器中,都使用如下方法创建XMLHttpRequest对象。

var xmlhttp = new XMLHttpRequest();

创建XMLHttpRequest对象时,如果在不同的浏览器中使用了不正确的创建方法,则浏览器将会报错,并且无法使用该对象,由此可见,很需要一种可以兼容不同浏览器的创建XMLHttpRequest对象的方法。例如,下面就是一个通用的解决方法:

var xmlhttp = false;//使用false作为判断条件,表示还没有创建XMLHttpRequest对象。 function createXMLHttp(){ try{ //尝试创建XMLHttpRequest对象,除IE外的浏览器都支持这个方法 xmlhttp = new XMLHttpRequest(); } catch(e){ try{ //使用较新版本的IE创建IE兼容的对象(Msxml2.XMLHTTP) xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e){ try{ //使用较老版本的IE创建IE兼容的对象(Microsoft.XMLHttp) xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch(failed){ //如果失败则保证request的值仍然为false xmlhttp = false; } } } return xmlhttp; }

此时可以使用如下代码判断创建XMLHttpRequest对象是否成功。

if(!xmlhttp){ //创建XMLHttpRequest对象失败 }else{ //创建成功 }

创建XMLHttpRequest对象完毕后,开始详细分析此对象的方法、属性以及最重要的onreadystatechange事件句柄。

2、XMLHttpRequest对象的方法

XMLHttpRequest对象中的方法如下所示:

1)、open(method,url,async):规定请求的类型、URL以及是否异步处理请求,参数的具体说明如下:

method : 请求的类型,有get或post两种。

url  :  文件在服务器上的位置。

async :true(异步)或  false (同步)。

方法open() 中的参数url是服务器上文件的地址,例如下面代码:

xmlhttp.open("GET","ajax_test.jsp,true");

该文件可以使任何类型的文件,例如.xml和 .txt ,或者服务器脚本文件,例如 .asp和.jsp。

其实Ajax提及的异步是指javaScript和XML。XMLHttpRequest对象如果要用于Ajax,其方法open() 的async参数必须设置为true。

通过Ajax技术,JavaScript无需等待服务器响应,而是在等待服务器响应时执行其他脚本,当响应就绪后对响应进行处理。

当使用参数async设置true时,Ajax规定在响应处于onreadystatechange事件中的就绪状态时执行的函数,例如下面的代码:

xmlhttp.onreadystatechange=function(){ if(xmlhttp.readyState==4 && xmlhttp.status==200){ document.getElementById("myDIv").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","text1.txt",true); xmlhttp.send();

当将参数async设置为false时,请不要编写函数onreadystatechange(),把代码放到函数send()语句的后面即可。

xmlhttp.open("GET","text1.txt",false); xmlhttp.send(); document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

2)、取消当前响应,关闭连接并且结束任何未决的网络活动,其语法为:

abort()

3)、getAllResponseHeaders();把HTTP响应头部作为未解析的字符串返回,用于以字符串形式返回完整的HTTP头信息,其中,包括Server、Date、Content-Type和Content-Length。语法格式:

getAllResponseHeaders()

4)、setRequestHeader(header,value):返回指定的HTTP、响应头部的值。

header:规定头的名称

value:规定头的值

5)、send(String):发送HTTP请求,使用传递给open()方法的参数,以及传递给该方法的可选请求体。此方法用于向服务器发送请求,如果请求声明为异步,该方法立即返回,否则将等到接收到响应为止。

参数String用于指定发送的数据,可以是DOM对象的实例,输入流或字符串,如果没有参数传递可以设置为null。

6)、setRequestHeader():向一个打开但未发送的请求设置或添加一个HTTP请求,语法格式如下:

setRequestHeader("header",“value”)

header:用于指定HTTP头

value:用于指定的HTTP头设置值

注意:setRequestHeader()方法必须在调用open()方法之后才能调用

7)、getRequestHeader():用于字符串形式返回指定的HTTP头信息,语法格式如下:

getRequestHeader(“headerLabel”)

headerLabel用于指定HTTP头,包括Server、Content-Type和Date等。

3、XMLHttpRequest属性

XMLHttpRequest对象中的属性如下所示:

1)、readyState:HTTP请求的状态,属性值从0-4,具体说明如下:

0:请求为初始化

1:服务器连接以建立

2:请求以接收

3:请求处理中

4:请求以完成,且响应以就绪

2)、responseText:到目前为止服务器的接收到的响应体(不包括头部)

,如果还没有接收到数据,就是控制字符串。如果来自服务器的响应并非XML,建议使用responseText属性,因为responseText属性返回字符串形式的响应,所以可以用如下代码使用responseText属性。

document.getElementById("myDiv").innerHTML=xmlhttp.responseText

3)、responseXML:对请求的响应,解析为XML并作为Document对象返回。如果来自服务器的响应是XML,而且需要作为XML对象进行解析,此时,需要使用responseXML属性。

4)、status:有服务器返回的HTTP状态代码。

5)、statusText:这个属性用名称而不是数字指定了请求的HTTP的状态代码。

4、XMLHttpRequest对象的时间句柄函数

当请求被发送到服务器时,需要执行一些基于响应的任务。事件onreadystatechange是每次readyState属性改变时调用的事件句柄函数。在属性readyState中保存了XMLHttpRequest的状态信息。

在onreadystatechange事件中规定,当服务器响应以做好被处理的准备时,所执行的任务。当readyState等于4或者200时,标示 响应已经就绪,代码如下:

xmlhttp.onreadystatechange=function(){ if(xmlhttp.readyState==4&&xmlhttp.status==200){ document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }

如果在网站上存在多个Ajax任务,那么应该为创建的XMLHttpRequest对象编写一个标准的函数,并为每个Ajax任务调用函数callback(),函数callback()应该调用包含URL以及发生onreadystatechange事件时执行的任务,例如代码如下:

function myFunction(){ loadXMlDoc("ajax_info.txt",function(){ if(xmlhttp.readyState==4&&xmlhttp.status==200a){ document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }); }

在指定所触发的事件处理器时,所调用的javaScript函数不能添加小括号及指定参数名,不过这里可以使用匿名函数,例如,要调用带参数的函数getResult(),可以使用下面的代码。

http_request.onreadystatechange=function(){ getResult("添加的参数"); //调用带参数的函数 } //通过匿名函数指定要带参数的函数

简单的学习笔记,希望博友提成宝贵的意见和建议,非常感谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ajax的技术核心,ajax技术的核心内容:XMLHttpRequest对象详解 的相关文章

  • 销售管理系统java sql_java+sqlserver商品销售管理系统的设计与实现

    摘 要 为解决传统商品销售管理系统操作不便的问题 在My Eclipse 2010 SQL Server 2008环境下 采用B S模式进行商品销售管理系统的设计与开发 实现网络化销售管理 系统主要分为两部分 购物管理部分和管理员管理部分
  • linux 之sed '1!G;h;$!d' file 的详细解释

    sed 1 G h d file 与tac file 命令执行结果相同 都是将行逆序输出 这条命令的详细解释 1 sed简介 sed是面向流的行编辑器 所谓面向流 是指接受标准输入的输入 输出内容到标准输出上 sed编辑器逐行处理文件 或输
  • python机器学习——图像内容分析

    计算机视觉 计算机视觉是一门研究如何使机器 看 的科学 更进一步的说 就是是指用摄影机和电脑代替人眼对目标进行识别 跟踪和测量等机器视觉 并进一步做图形处理 使电脑处理成为更适合人眼观察或传送给仪器检测的图像 计算机视觉包括多个级别的分析
  • Premiere Pro入门

    介绍 Adobe Premiere Pro 简称PR 是最强大的视频编辑软件 可同时创建多个时间轨道 多个视频素材按层遮挡 可对单个素材添加各种效果 例如放缩 移动 旋转 裁剪等 可插入图片遮挡视频素材 并且支持png透明 可添加字幕 可导
  • 新版Spring Boot(11)- Spring Boot 整合NoSQL(1)

    1 整合redis 单测 package com tzb cachespringboot import com tzb cachespringboot model User import org junit jupiter api Test
  • C++ 引用 解引用 取地址 指针 双指针 指针的引用 二级指针

    为了把引用 解引用 取地址 指针 双指针 指针的引用 二级指针 这一块弄清楚 钻研与查阅资料得到如下体会 1 引用与取地址 reference and address 引用的 前面一定有类型符号 否则就不是引用 取地址的 后面一定有变量名称
  • 景联文数据标注:AI大模型在教育和医疗领域的应用

    8月31日消息 备受行业瞩目的首批大模型产品获批名单发布 首批通过备案的8家大模型公司分别是 百度 文心一言 抖音 云雀大模型 智谱AI GLM大模型 中科院 紫东太初大模型 百川智能 百川大模型 商汤 日日新大模型 MiniMax ABA
  • 下载Git速度太慢的解决方法【记录】

    直接传送门 点击此链接即可进入git的下载仓库 https registry npmmirror com binary html path git for windows 如下图所示 点击选择你需要的版本进去下载就行了 这里记录一下 备忘
  • Qt 常用类 (4)—— QPoint

    QPoint 类代表一个坐标点 实现在 QtCore 共享库中 它可以认为是一个整型的横坐标和一个整型的纵坐标的组合 构造 QPoint 类支持以下两种构造方式 plain view plaincopy QPoint 构造横纵坐标均为 0
  • 静态链表的基本操作

    定义 用数组描述的链表叫做静态链表 这种描述方法还有起名叫做游标实现法 基本操作 Status InitList StaticLinkList space 将一维数组space中各分量链成一个备用链表 int Malloc SLL Stat
  • 以太坊区块与区块头数据结构解析

    Block数据结构解析 源代码 Block represents an entire block in the Ethereum blockchain type Block struct header Header uncles Heade
  • IBM MQ命令:DEFINE AUTHINFO

    此命令里有很多内容值得一看 https www ibm com docs en ibm mq 8 0 topic commands define authinfo q085490 6 一 CHCKCLNT CHCKCLNT This att
  • Git使用详解(结合GitLab和GitHub)

    转载请注明出处 https blog csdn net mythmayor article details 82346539 如果你想了解更多关于GitHub使用的问题 欢迎查看我的另一篇博客进行学习与交流 GitHub的使用详解 一 Gi
  • VC++读目录下所有文件

    include
  • ChatGPT训练营来啦,手把手带你玩转ChatGPT~

    ChatGPT的出现为测试行业带来了新的机遇和挑战 尽管许多人担心它的强大可能会取代测试人员 但实际上ChatGPT可以成为测试人员的强大助手 提高测试工作的效率和准确性 那么 我们应该如何借助 ChatGPT 让我们的测试工作更高效呢 C
  • Lua 随机数生成问题

    原文链接 http blog csdn net zhangxaochen article details 8095007 Lua 生成随机数需要用到两个函数 math randomseed xx math random n m 1 math
  • Win10开启热点共享后断网怎么解决?

    描述 关闭热点一切正常 打开热点以后电脑浏览器无法联网 最后发现可能是windows更新导致的 卸载了2022 06 17的更新就好了 因为没有去看dism 是什么东西 怕有木马啥的 就选择方法二卸载了2022 06 17的更新就好了 参考
  • QCustomPlot 使用——绘制折线图

    初始化数据 QVector
  • 检测模型设计准则

    作者 小书童 编辑 集智书童 点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 目标检测 技术交流群 后台回复 2D检测综述 获取鱼眼检测 实时检测 通用2D检测等近5年内所有综述 设计高效 高质

随机推荐

  • 电路板布局

    一 PCB布局要求 1 可制造性设计 DFM 可装配性 DFA 可维修性 DFS 可测试性 DFT 2 电气性能实现 ccc fcc ce认证 EMC SI PI及散热要求 3 合理的成本 层数也多成本越高 4 美观度 二 布局的一般原则
  • uni封装ajax,uni-app封装ajax请求方法

    位置项目根目录index js 定义了两种请求get和post import baseconfig from common baseconfig js const httpClient request function method url
  • 求生之路2服务器搭建插件安装及详细的游戏参数配置教程windows

    求生之路2服务器搭建插件安装及详细的游戏参数配置教程windows 大家好我是艾西 最近研究了下 l4d2 求生之路2 这款游戏的搭建以及架设过程 今天就给喜欢l4d2这款游戏的小伙伴们分享下怎么搭建架设一个自己的服务器 毕竟自己当服主是热
  • C语言指针学习 课堂记录

    定义指针变量 类型名 指针变量名 pa和pb是自定义名 char pa 定义一个指向字符型的指针变量 int pb 定义一个指向整型的指针变量 取地址运算符和取值运算符 一 如果需要获取某个变量的内存地址 可以使用取地址运算符 char p
  • 如何获取虚函数表指针?虚函数表地址?虚函数地址?

    include
  • SOLIDWORKS PDM&Manage升级SOP——服务器篇

    SOLIDWORKS产品数据管理 PDM 解决方案可帮助您控制设计数据 并且从本质上改进您的团队就产品开发进行管理和协作的方式 使用 SOLIDWORKS PDM Professional 您的团队能够 1 安全地存储和索引设计数据以实现快
  • react 中常见API

    跟着大佬的步伐真好 参考 React进阶 React全部api解读 基础实践大全 夯实基础2万字总结
  • Java实现一个单号生成工具类

    在项目开发的过程中 如果一个系统存在多种不同类型的单据 单号生成就比较难以处理 为此 创造出一个单号生成的工具类就很有必要 直接上代码 实体类 数据库字段同下 public class SerialNumber TableId type I
  • python编程求三角形面积公式_python编程 输入三角形的三条边,计算三角形的面积\...

    展开全部 coding UTF 8 Filename test py author by www runoob com a float input 输入三角62616964757a686964616fe59b9ee7ad9431333433
  • 数据字典包括六个部分

    数据字典包括六个部分 数据字典要包括在以下六个部分吧 1 编写数据项 数据项描述 数据项名 数据项含义说明 别名 数据类型 长度 取值范围 取值含义 与其他数据项的逻辑关系 其中 取值范围 与其他数据项的逻辑关系 定义了数据的完整性约束条件
  • VirtualBox如何配置Bridge和Host-Only虚拟网卡

    VirtualBox安装OpenWRT虚拟机以后 需要为虚拟机配置两块虚拟网卡才能保证虚拟机的正常开发环境 一块设为Bridge模式 连接虚拟机网卡与Host网卡的Internet网络 另一块设为Host Only模式 用于Host主机访问
  • Python 第二代非支配排序遗传算法(NSGA-II)求解多目标高次函数的帕累托前沿

    系列文章目录 目录 系列文章目录 前言 一 模型的建立 二 算法的步骤 三 代码的实现 四 输出的结果 总结 前言 在项目进度管理中 NSGA II是常用的求解多目标项目进度管理优化问题的算法 虽然NSGA III也出来了些日子 但是目前主
  • C/C++中#,##,__FILE__,__LINE__等的用法

    在Win 7 GCC下测试通过 include
  • Open3D (C++) 点云按ID序号进行赋色

    目录 一 概述 二 代码实现 三 结果展示 一 概述 直接调用Open3D中的颜色渲染函数根据点云的ID信息为点云中的每个点附上颜色 并保存颜色渲染结果至 pcd文件 二 代码实现 include
  • C++ primer 第14章 操作重载与类型转换

    文章目录 基本概念 直接调用一个重载的运算符函数 某些运算符不应该被重载 使用与内置类型一致的含义 选择作为成员或者非成员 输入和输出运算符 重载输出运算符 lt lt 输出运算符尽量减少格式化操作 输入输出运算符必须是非成员函数 重载输入
  • 基于 OpenCV 的图像分割项目实战

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 本期我们将一起来实现一个有趣的问题 图像分割的算法 本文的示例代码可以在以下链接中找到 https github com kiteco kite python blog
  • 如何把对象里的数组取出来合成一个新数组?

    如何把对象里的数组取出来合成一个新数组 var obj 1 tempId 1589851345842 type 2 typeQt name 王桂 idcard zhengzmm fam 11 work 务农 state 1 LAY TABL
  • HJ29字符串加解密

    同上一节的题 本身没有难度 只要注意细节就好 虽然为中等题 可能考察的是扎实的基础知识吧 include
  • Canvas 绘制图像的三种方法、实现帧动画

    绘制图像的三种方法 绘制图像 ctx drawImage 第一种版本 三参数版本context drawImage img x y 把图形绘制到指定的坐标 必须要在图片下载之后才可以使用 使用onload事件 img nl ad funct
  • ajax的技术核心,ajax技术的核心内容:XMLHttpRequest对象详解

    XMLHttpRequest对象是Ajax技术最核心内容 所有现代浏览器均支持XMLHttpRequest对象 XMLHttpRequest用于在后台与服务器交换数据 这意味着可以再不重新加载整个网页的情况下 对网页的某部分进行更新 下面分