XML DOM - XMLHttpRequest ວັດຖຸ
- ການກັບຄືນ DOM Text
- ການໄປຕໍ່ມາ DOM XMLSerializer
ໂອບເຈັນທໍລະບົບ XMLHttpRequest
XMLHttpRequest ວັດຖຸສະໜັບສະໜູນການເຂົ້າເຖິງ HTTP ຂັ້ນຕົວຢ່າງເຕັມທັງໝົດ, ລວມທັງການເຮັດ POST ແລະ HEAD ຂໍ້ຮຽກຮ້ອງ ແລະ GET ຂໍ້ຮຽກຮ້ອງທົ່ວໄປ. XMLHttpRequest ສາມາດກັບຄືນຄຳຕອບຂອງ Web Server ຢ່າງສະຫນັບສະຫນູນ ຫລື ຢ່າງອັດຕາພາສານ. ມັນສາມາດກັບຄືນເນື້ອທີ່ຢ່າງສະຫນັບສະຫນູນ ຫລື DOM ບັນນາທິການ.
ເຖິງວ່າມີຊື່ XMLHttpRequest, ມັນບໍ່ຈະຈໍາກັດພຽງແຕ່ກັບ XML ບັນນາທິການ: ມັນສາມາດຍິນຍອມບັນນາທິການທຸກຮູບແບບຂອງຂໍ້ຄວາມ.
XMLHttpRequest ວັດຖຸຈະມີຊື່ AJAX ຂອງສາຂາ Web Application Architecture ທີ່ສຳຄັນຫນັງຫນາງຫນັງ.
ການສະໜັບສະໜູນບັນດາບັນນາທິການໃນ
XMLHttpRequest ໄດ້ຮັບການສະໜັບສະໜູນທີ່ດີຈາກບັນດາບັນນາທິການໃນທົ່ວໄປ. ຄວາມຄິດທີ່ນິຍົມພຽງພໍກໍ່ຈະກາຍໃນການສ້າງບັນດາວັດຖຸ XMLHttpRequest. ໃນ IE 5 ແລະ IE 6, ຕ້ອງໃຊ້ພຽງພໍ IE ActiveXObject() ຄວາມຄິດທີ່ສະໜັບສະໜູນ IE. ຄືກັບທີ່ ໂອບເຈັນທໍລະບົບ XMLHttpRequest 这一节所介绍的。
W3C 标准化
XMLHttpRequest 对象还没有标准化,但是 W3C 已经开始了标准化的工作,本手册介绍的内容都是基于标准化的工作草案。
当前的 XMLHttpRequest 实现已经相当一致。但是和标准有细微的不同。例如,一个实现可能返回 null,而标准要求是空字符串,或者实现可能把 readyState 设置为 3 而不保证所有的响应头部都可用。
属性
readyState
HTTP 请求的状态.当一个 XMLHttpRequest 初次创建时,这个属性的值从 0 开始,直到接收到完整的 HTTP 响应,这个值增加到 4。
5 个状态中每一个都有一个相关联的非正式的名称,下表列出了状态、名称和含义:
ສະຖານະ | ຊື່ | ອະທິບາຍ |
---|---|---|
0 | Uninitialized | ສະຖານະການການລວມການ. XMLHttpRequest ອົງການໄດ້ຖືກສ້າງຫຼືຖືກລົງບັນຍາບັນຍັດຈາກ abort(). |
1 | Open | ການໂທກ open() ໄດ້ຖືກໂທກ ແຕ່ send() ບໍ່ໄດ້ຖືກໂທກ. ຄຳຮ້ອງການຍັງບໍ່ໄດ້ສົ່ງຕົວ. |
2 | Sent | ການໂທກ Send() ໄດ້ຖືກໂທກ. HTTP ຄຳຮັງການໄດ້ສົ່ງໄປຫາສະຖານນີ Web. ບໍ່ໄດ້ຮັບຄຳຮັບຮັບ. |
3 | Receiving | ການຄົ້ນຫາຫົວຂໍ້ສະເພາະທັງໝົດຈະຮັບຮູ້. ການຄົ້ນຫາຄຳຮັບຮັບເລີ່ມຕົ້ນແຕ່ບໍ່ໄດ້ສຳເລັດ. |
4 | Loaded | HTTP ຄຳຮັບຮັບໄດ້ຮັບການຄົ້ນຫາຢ່າງເຕັມສົມ. |
ຄູ່ມູນ readyState ຈະບໍ່ຫຼຸດລົງ ເວັ້ນແຕ່ເມື່ອການໂທກ abort() ຫຼື open() ວຽກງານໃນລະຫວ່າງການດໍາເນີນຄວາມຕ້ອງການ. ແຕ່ລະຄັ້ງທີ່ຄູ່ມູນນັ້ນເພີ່ມຂຶ້ນຈະສະເຫລີມງານ onreadystatechange.
responseText
ຄຳຮັບຮັບທີ່ໄດ້ຮັບຈາກສະຖານນີບໍ່ລວມຫົວຂໍ້ (ບໍ່ໄດ້ຮັບຂໍ້ມູນບໍ່ມີຫົວຂໍ້ນັ້ນ).
ຖ້າ readyState ຕໍ່າກວ່າ 3 ຂໍ້ມູນນັ້ນເປັນຄວາມລາງ. ເມື່ອ readyState ແມ່ນ 3 ຂໍ້ມູນນັ້ນກັບຄືນພາຍໃນການຄົ້ນຫາຄຳຮັບຮັບ. ເມື່ອ readyState ແມ່ນ 4 ຂໍ້ມູນນັ້ນກັບຄືນພາຍໃນການຄົ້ນຫາຄຳຮັບຮັບທີ່ເຕັມ.
ຖ້າຄຳຮັບຮັບມີຫົວຂໍ້ສະເພາະສຳລັບການກະກຽມຄວາມມີນິວັນຍາບັນຍັດສຳລັບການຄົ້ນຫາ ຈະໃຊ້ຄວາມມີນິວັນຍາບັນຍັດນັ້ນ. ຖ້າບໍ່ມີຫົວຂໍ້ນັ້ນ ຈະສົ່ງຕົວຫາ Unicode UTF-8.
responseXML
ການຕອບຮັບຄຳຮ້ອງໄດ້ຄົ້ນຫາຫຼັງຈາກ XML ແລະເປັນ Document Object返回。
status
由服务器返回的 HTTP 状态代码,如 200 表示成功,而 404 表示 "Not Found" 错误。当 readyState 小于 3 的时候读取这一属性会导致一个异常。
statusText
这个属性用名称而不是数字指定了请求的 HTTP 的状态代码。也就是说,当状态为 200 的时候它是 "OK",当状态为 404 的时候它是 "Not Found"。和 status 属性一样,当 readyState 小于 3 的时候读取这一属性会导致一个异常。
事件句柄
onreadystatechange
每次 readyState 属性改变的时候调用的事件句柄函数。当 readyState 为 3 时,它也可能调用多次。
方法
abort()
取消当前响应,关闭连接并且结束任何未决的网络活动。
这个方法把 XMLHttpRequest 对象重置为 readyState 为 0 的状态,并且取消所有未决的网络活动。例如,如果请求用了太长时间,而且响应不再必要的时候,可以调用这个方法。
getAllResponseHeaders()
把 HTTP 响应头部作为未解析的字符串返回。
如果 readyState 小于 3,这个方法返回 null。否则,它返回服务器发送的所有 HTTP 响应的头部。头部作为单个的字符串返回,一行一个头部。每行用换行符 "\r\n" 隔开。
getResponseHeader()
返回指定的 HTTP 响应头部的值。其参数是要返回的 HTTP 响应头部的名称。可以使用任何大小写来制定这个头部名字,和响应头部的比较是不区分大小写的。
该方法的返回值是指定的 HTTP 响应头部的值,如果没有接收到这个头部或者 readyState 小于 3 则为空字符串。如果接收到多个有指定名称的头部,这个头部的值被连接起来并返回,使用逗号和空格分隔开各个头部的值。
open()
ການກະກຽມຫົວຂໍ້ຂອງ HTTP ເພື່ອຄວາມທີ່ຈະສົ່ງຫົວຂໍ້ URL ແລະວິທີ HTTP ແຕ່ບໍ່ສົ່ງຫົວຂໍ້.
send()
ສົ່ງຫົວຂໍ້ HTTP ໃນທາງທີ່ຈະສົ່ງຫົວຂໍ້ open() ແລະຮູບແບບຂໍ້ຂອງຫົວຂໍ້ທີ່ເປັນອະນຸຍາດ.
setRequestHeader()
ສ້າງຫົວຂໍ້ HTTP ຫາຄວາມເປັນປະຈຳການທີ່ຍັງບໍ່ສົ່ງຫາຍອອກຫາສະບັບ HTTP.
XMLHttpRequest.open()
ສ້າງ parameter HTTP request
ກົນລະບົບ
open(method, url, async, username, password)
parameter method ແມ່ນ HTTP method ທີ່ຈະນໍາໃຊ້ ສຳລັບ request.ມີຄວາມຈິງທີ່ມີຄວາມຈິງ GET, POST ແລະ HEAD.
parameter url ແມ່ນ subject ຄຳສັ່ງ.ທົດລອງ browser ຈະມີ policy security same-origin ແລະ ຕ້ອງການ url ດັ່ງກ່າວນີ້ຈະມີ hostname ແລະ port ດຽວກັນ ກັບ text script ທີ່ບັນຈຸ.
parameter async ຈະສະແດງວ່າ ຄຳສັ່ງຈະດຳເນີນການຢ່າງ asynchronous.ຖ້າ parameter ນີ້ແມ່ນ false ຄຳສັ່ງຈະດຳເນີນການ synchronous, ການເອິ້ນ send() ຈະຖືກກັກກັນຈົນກວ່າ response ໄດ້ຮັບການຕອບຄົງ.ຖ້າ parameter ນີ້ແມ່ນ true ຫລື ບໍ່ມີ parameter ນີ້, ຄຳສັ່ງຈະດຳເນີນການ asynchronous ແລະ ຈະຕ້ອງການ event handler onreadystatechange.
parameter username ແລະ password ແມ່ນ optional ເພື່ອຕອບສະຫນອງ authentication credentials ສຳລັບ authorization ທີ່ຕ້ອງການສຳລັບ url.ຖ້າມີການກໍານົດ ມັນຈະເປັນການປ່ຽນຊົງ url ທີ່ມີ authorization.
ການອະທິບາຍ
ກົນວິທີນີ້ຈະສ້າງ parameter ຄຳສັ່ງສຳລັບ send() method ທີ່ຈະນໍາໃຊ້ຫລັງຈາກນັ້ນ。ມັນຈະປ່ຽນ readyState ເປັນ 1,ລົບການກໍານົດ header ທີ່ມີກ່ອນແລະ header ທີ່ບໍ່ໄດ້ຮັບການຕອບຂອງ response ທີ່ມີກ່ອນແລະແຕ່ລະ parameter responseText, responseXML, status ແລະ statusText ຈະຖືກຕົກລົງເປັນ default value.ການເອິ້ນກົນວິທີນີ້ຈະເປັນຄວາມປອດໄພໃນຕອນ readyState 0 (ເມື່ອ XMLHttpRequest object ໄດ້ຖືກສ້າງຫລັງຈາກ abort() method ຖືກເອິ້ນ) ແລະ ເມື່ອ readyState 4 (ເມື່ອ response ໄດ້ຮັບການຕອບ).ຖ້າມີການເອິ້ນກົນວິທີອື່ນໆຫລັງຈາກນັ້ນ open() method ຈະມີພາລະກິດທີ່ກໍານົດ.
ນອກຈາກການບັນທຶກ parameter ສຳລັບ send() method ແລະ reset XMLHttpRequest object ເພື່ອການນໍາໃຊ້ທົດລອງອີກຄັ້ງ open() method ບໍ່ມີພາລະກິດອື່ນໆ。ສຳລັບຄວາມຈິງທີ່ມີຄວາມສາມາດທີ່ຈະກັບຄວາມຄົງຄວາມຮັບອະນຸຍາດ open() method ຈະບໍ່ເປີດການຄອນເວັບປະກາດຕໍ່ Web server.
XMLHttpRequest.send()
ສົ່ງ HTTP ຄຳສັ່ງ
ກົນລະບົບ
send(body)
ຖ້າຮັບຄວາມຈິງຜ່ານການເອິ້ນ open() ວິທີ HTTP ແມ່ນ POST ຫລື PUT,body Parameter ຈະກໍານົດ request body ເປັນຄຳສັ່ງທີ່ Document Objectຖ້າສຳຄັນບໍ່ມີຄວາມຈິງທີ່ຕ້ອງການດັ່ງກ່າວນີ້ຈະຖືກຕົກລົງເປັນ null。ສຳລັບວິທີອື່ນໆທັງໝົດຈະບໍ່ມີຄວາມສາມາດດຳເນີນການດັ່ງກ່າວນີ້ເຫັນຫລັງຈາກວ່າຈະຖືກຕົກລົງເປັນ null (ບາງການຈັດການບໍ່ຈະອະນຸຍາດການຖອນຄຳສັ່ງນີ້ອອກຈາກ)。
ການອະທິບາຍ
这个方法导致一个 HTTP 请求发送。如果之前没有调用 open(),或者更具体地说,如果 readyState 不是 1,send() 抛出一个异常。否则,它发送一个 HTTP 请求,该请求由以下几部分组成:
- 之前调用 open() 时指定的 HTTP 方法、URL 以及认证资格(如果有的话)。
- ຫົວຂໍ້ຂອງການສະພາບຂອງການສົ່ງທີ່ຈະມີຄວາມຈິງຈະມີ send() (ຖ້າມີ).
- ທີ່ຈະສົ່ງໃຫ້ກັບກົນລະບົບນີ້ body ຄູ່ມື.
ເມື່ອການສົ່ງຂໍ້ຂອງການສະພາບຈະຖືກສົ່ງຕາມ send() send() ຈະຕັດສິດ readyState ອາກາດ 2 ແລະຈະສະແດງ onreadystatechange event handler.
ຖ້າຄູ່ມື async ທີ່ມີຄວາມຈິງຈະບໍ່ມີຄວາມຈິງ send() ຈະຖືກກັກກັນ ແລະບໍ່ຈະປະກາດຄືນ ເວລາຈະຫາມາໃຊ້ກົນລະບົບ send() ທີ່ readyState ອາກາດ 4 ແລະການຄຳສັ່ງຂອງເວລາທີ່ຈະຖືກຍອມຮັບທັງໝົດ. ຖ້າ async ທີ່ມີຄວາມຈິງ ຫຼືບໍ່ມີຄວາມຈິງຈະຖືກກຳນົດ send() ຈະປະກາດຄືນທັນທີແລະຈະຈະຖືກຈັດການຄຳສັ່ງຂອງເວລາທີ່ຈະມີຄຳສັ່ງຂອງເວລາທີ່ຈະມີຄຳສັ່ງທີ່ຈະຖືກຈັດການຄືນ.
ຖ້າທີ່ວ່າການຄຳສັ່ງທີ່ຈະມີ HTTP ການກັບຄືນຈະມີ HTTP ການກັບຄືນ send() ກົນລະບົບທີ່ຈະຕິດຕາມກັບການກັບຄືນ. ເມື່ອຫົວຂໍ້ຂອງ HTTP ທີ່ຈະມີຄວາມຈິງຈະໄດ້ຖືກຍອມຮັບທັງໝົດ send() ຫຼື background thread ຈະຕັດສິດ readyState ອາກາດ 3 ແລະຈະສະແດງ onreadystatechange event handler. ເມື່ອການຖືກຍອມຮັບທີ່ຈະມີຄວາມຈິງຈະມີການຍອມຮັບທັງໝົດ send() ຫຼື background thread ຈະຕັດສິດ readyState ອາກາດ 4 ແລະຈະສະແດງ onreadystatechange event handler ຄັ້ງສຸດທ້າຍ.
XMLHttpRequest.setRequestHeader()
ກົນລະບົບ
setRequestHeader(name, value)
ຄູ່ມື name ແມ່ນຊື່ຫົວຂໍ້ທີ່ຈະກຳນົດ. ຄູ່ມືນີ້ບໍ່ຄວນມີການປ່ຽນປອດກັນ, ການຍິງຫົວຂໍ້ຫຼືການປ່ຽນປອດກັນ.
ຄູ່ມື value ແມ່ນຄູ່ມືຂອງຫົວຂໍ້. ຄູ່ມືນີ້ບໍ່ຄວນມີການປ່ຽນປອດກັນ.
ການອະທິບາຍ
ກົນລະບົບ setRequestHeader() ກຳນົດຫົວຂໍ້ຂອງການສະພາບ HTTP ຂໍ້ສົ່ງທີ່ຄວນມີຢູ່ໃນການສົ່ງທີ່ຈະຖືກສົ່ງຕາມການສັ່ງຄືນ send(). ກົນລະບົບນີ້ຈະສາມາດຫາມາໃຊ້ໄດ້ພຽງແຕ່ໃນສະພາບ readyState ອາກາດ 1 ເຊິ່ງຈະເປັນບ່ອນທີ່ຫາມາໃຊ້ກົນລະບົບ open() ກ່ອນຫາມາໃຊ້ກົນລະບົບ send().
ຖ້າຫົວຂໍ້ທີ່ມີຊື່ລະບຸກໄດ້ຖືກກຳນົດແລ້ວ ຄູ່ມືສະພາບຫົວຂໍ້ບໍ່ແມ່ນມີຄວາມຈິງຈະແມ່ນຄືກັບຄູ່ມືທີ່ຖືກກຳນົດກ່ອນກັບຄວາມຍິ່ງຂອງຄຳສັ່ງຄືນຈະເພີ່ມຕື່ມເຖິງຄຳສັ່ງຄືນທີ່ຖືກກຳນົດ.
如果 open() 调用指定了认证资格,XMLHttpRequest 自动发送一个适当的 Authorization 请求头部。但是,你可以使用 setRequestHeader() 来添加这个头部。类似地,如果 Web 服务器已经保存了和传递给 open() 的 URL 相关联的 cookie,适当的 Cookie 或 Cookie2 头部也自动地包含到请求中。可以通过调用 setRequestHeader() 来把这些 cookie 添加到头部。XMLHttpRequest 也可以为 User-Agent 头部提供一个默认值。如果它这么做,你为该头部指定的任何值都会添加到这个默认值后面。
ບາງຫົວຂໍ້ຂໍ້ມູນທີ່ຈະຖືກການກະກຽມໂດຍ XMLHttpRequest ແຕ່ບໍ່ແມ່ນໂດຍວິທີນີ້ຫລັງຈາກນັ້ນ ເພື່ອພົບກັບຂໍ້ກຳນົດ HTTP. ບັນດາຫົວຂໍ້ທີ່ກ່ຽວກັບການຈັດສັນກັບຜູ້ສົ່ງຂໍ້ມູນ:
- Host
- Connection
- Keep-Alive
- Accept-charset
- Accept-Encoding
- If-Modified-Since
- If-None-Match
- If-Range
- Range
- ການກັບຄືນ DOM Text
- ການໄປຕໍ່ມາ DOM XMLSerializer