课程表

CoffeeScript 语法

CoffeeScript 类和对象

CoffeeScript 字符串

CoffeeScript 数组

CoffeeScript 日期和时间

CoffeeScript 数学

CoffeeScript 方法

CoffeeScript 元编程

CoffeeScript jQuery

CoffeeScript 正则表达式

CoffeeScript 网络

CoffeeScript 设计模式

CoffeeScript 数据库

CoffeeScript 测试

工具箱
速查手册

不使用jQuery的Ajax请求

当前位置:免费教程 » JS/JS库/框架 » CoffeeScript

问题

你想要通过 AJAX 来从你的服务器加载数据,而不使用 jQuery 库。

解决方案

你将使用本地的 XMLHttpRequest 对象。

通过一个按钮来打开一个简单的测试 HTML 页面。

  1. <!DOCTYPE HTML>
  2. <html lang="en-US">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>XMLHttpRequest Tester</title>
  6. </head>
  7. <body>
  8. <h1>XMLHttpRequest Tester</h1>
  9. <button id="loadDataButton">Load Data</button>
  10. <script type="text/javascript" src="XMLHttpRequest.js"></script>
  11. </body>
  12. </html>

当单击该按钮时,我们想给服务器发送 Ajax 请求以获取一些数据。对于该例子,我们使用一个 JSON 小文件。

  1. // data.json
  2. {
  3. message: "Hello World"
  4. }

然后,创建 CoffeeScript 文件来保存页面逻辑。此文件中的代码创建了一个函数,当点击加载数据按钮时将会调用该函数。

  1. 1 # XMLHttpRequest.coffee
  2. 2 loadDataFromServer = ->
  3. 3 req = new XMLHttpRequest()
  4. 4
  5. 5 req.addEventListener 'readystatechange', ->
  6. 6 if req.readyState is 4 # ReadyState Complete
  7. 7 successResultCodes = [200, 304]
  8. 8 if req.status in successResultCodes
  9. 9 data = eval '(' + req.responseText + ')'
  10. 10 console.log 'data message: ', data.message
  11. 11 else
  12. 12 console.log 'Error loading data...'
  13. 13
  14. 14 req.open 'GET', 'data.json', false
  15. 15 req.send()
  16. 16
  17. 17 loadDataButton = document.getElementById 'loadDataButton'
  18. 18 loadDataButton.addEventListener 'click', loadDataFromServer, false

讨论

在以上代码中,我们对 HTML 中按键进行了处理(第 16 行)以及添加了一个单击事件监听器(第 17 行)。在事件监听器中,我们把回调函数定义为 loadDataFromServer。

我们在第 2 行定义了 loadDataFromServer 回调的开头。

我们创建了一个 XMLHttpRequest 请求对象(第 3 行),并添加了一个 readystatechange 事件处理器。请求的 readyState 发生改变的那一刻,它就会被触发。

在事件处理器中,我们会检查判断是否满足 readyState=4,若等于则说明请求已经完成。然后检查请求的状态值。状态值为 200 或者 304 都代表着请求成功,其它则表示发生错误。

如果请求确实成功了,那我们就会对从服务器返回的 JSON 重新进行运算,然后把它分配给一个数据变量。此时,我们可以在需要的时候使用返回的数据。

在最后我们需要提出请求。

在第 13 行打开了一个 “GET” 请求来读取 data.json 文件。

在第 14 行把我们的请求发送至服务器。

旧版服务器支持

如果你的应用需要使用旧版本的 Internet Explorer ,你需确保 XMLHttpRequest 对象存在。为此,你可以在创建 XMLHttpRequest 实例之前输入以下代码。

  1. if (typeof @XMLHttpRequest == "undefined")
  2. console.log 'XMLHttpRequest is undefined'
  3. @XMLHttpRequest = ->
  4. try
  5. return new ActiveXObject("Msxml2.XMLHTTP.6.0")
  6. catch error
  7. try
  8. return new ActiveXObject("Msxml2.XMLHTTP.3.0")
  9. catch error
  10. try
  11. return new ActiveXObject("Microsoft.XMLHTTP")
  12. catch error
  13. throw new Error("This browser does not support XMLHttpRequest.")

这段代码确保了 XMLHttpRequest 对象在全局命名空间中可用。

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号