导读:上一篇博客简单介绍了一下对Ajax中的核心对象XMLHttpRequest的封装。那么为了方便对Ajax的应用,我们还需要进一步的对Ajax的基本功能进行下一步的封装,不得不说的是早就有人专门写JS或者说已经有JQ直接引入使用,所以,本篇博客则是站在一个学习实践的角度,用JavaScript原生代码实现Ajax的简单封装。

一、基本介绍

主要是实现了从客户端到服务端发送请求,继而接收服务端响应的结果的过程。在这个实现过程中,一共有3个物件:其一是运用了一个HTML页充当了客户端;其二是运用了一个web页充当了服务端;最后是一个JS文件,在这个JS文件中,实现了对Ajax的封装。

在理解ajax的局部刷新的时候,可以将这一小部分看成是一个网页的一个组成部分去看。

二、实现过程

2.1,JavaScript1(Ajax的封装)

备注:本JS代码是从网上查询,然后拼凑的,并不是原创!

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;">var createAjax = function () {
  2. var xhr = null;
  3. try {//IE系列浏览器
  4. xhr = new ActiveXObject("microsoft.xmlhttp");
  5. } catch (e1) {
  6. try {//非IE浏览器
  7. xhr = new XMLHttpRequest();
  8. } catch (e2) {
  9. window.alert("您的浏览器不支持ajax,请更换!");
  10. }
  11. }
  12. return xhr;
  13. };
  14. var ajax = function (conf) {
  15. var type = conf.type;//type参数,可选
  16. var url = conf.url;//url参数,必填
  17. var data = conf.data;//data参数可选,只有在post请求时需要
  18. var dataType = conf.dataType;//datatype参数可选
  19. var success = conf.success;//回调函数可选
  20. //解决缓存的转换
  21. if (url.indexOf("?") >= 0) {
  22. url = url + "&t=" + (new Date()).valueOf();
  23. } else {
  24. url = url + "?t=" + (new Date()).valueOf();
  25. }
  26. //解决跨域问题
  27. if (url.indexOf("http://") >= 0) {
  28. url.replace(">", "&");
  29. url = url + "Proxy?url=";
  30. }
  31. if (type == null) {//type参数可选,默认为get
  32. type = "get";
  33. }
  34. if (dataType == null) {//dataType参数可选,默认为text
  35. dataType = "text";
  36. }
  37. var xhr = createAjax();
  38. xhr.open(type, url, true);
  39. if (type == "GET" || type == "get") {
  40. xhr.send(null);
  41. } else if (type == "POST" || type == "post") {
  42. xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
  43. xhr.send(data);
  44. }
  45. xhr.onreadystatechange = function () {
  46. if (xhr.readyState == 4 && xhr.status == 200) {
  47. if (dataType == "text" || dataType == "TEXT") {
  48. if (success != null) {//普通文本
  49. success(xhr.responseText);
  50. }
  51. } else if (dataType == "xml" || dataType == "XML") {
  52. if (success != null) {//接收xml文档
  53. success(xhr.responseXML);
  54. }
  55. } else if (dataType == "json" || dataType == "JSON") {
  56. if (success != null) {//将json字符串转换为js对象
  57. success(eval("(" + xhr.responseText + ")"));
  58. }
  59. }
  60. }
  61. };
  62. };</span>

说明:在这里有三个注意的地方:

1,个人之前在运用try catch的时候,是以为以为catch只能运用一次捕捉异常,最近在J2SE里面的异常机制里面,才学习到可以多次使用。所以,在这里,首先是尝试着对IE浏览器进行XMLHttpRequest对象的创建,然后尝试在非IE浏览器上创建,最后当这两种都不行的时候,捕捉异常进行处理。注:为什么要分IE类和非IE类,这和每种类型浏览器的内核有关。

2,在设置回调函数的时候,对不同返回的数据类型进行了处理,那么也就是说我们还需要对数据类型的处理方式进行封装,这一块在本篇博客中未实现。

3,这个ajax的封装和之前对于XMLHttpRequest对象的封装有什么不同?其实整体都是5步,在上一篇博客中,将POST和GET方式分别写了,包括这次封装的时候也是尝试着去分别运用5步使用法封装,后来才写成了现在这样。

2.2,HTMLPage1(客户端)

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"><!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <script src="JavaScript1.js"></script>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  6. <title>测试Ajax的JS封装</title>
  7.  
  8. <script type="text/javascript">
  9. function btn_click() {
  10. var username = document.getElementById("txt_username").value;
  11. var age = document.getElementById("txt_age").value;
  12. ajax({
  13. type: "get",
  14. url: "WebForm1.aspx?username=" + username
  15. + "&age=" + age,
  16. success: function (data) {
  17. if (data == "yes") {
  18. alert("134");
  19. } else {
  20. alert("asdg");
  21. }
  22. }
  23. });
  24. }
  25. </script>
  26. </head>
  27. <body>
  28. <label for="txt_username">姓名:</label>
  29. <input type="text" id="txt_username" />
  30. <br /><br/>
  31. <label for="txt_age">年龄:</label>
  32. <input type="text" id="txt_age" />
  33. <br /><br/>
  34. <input type="button" value="测试请求" style="margin-left:20px;" id="btn" onclick="btn_click();" />
  35.  
  36. </body>
  37. </html>
  38. </span></span>

2.3,WebForm1页(模拟服务器端)

备注:页面显示无代码

  1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7.  
  8. namespace WebApplication1
  9. {
  10. public partial class WebForm1 : System.Web.UI.Page
  11. {
  12. protected void Page_Load(object sender, EventArgs e)
  13. {
  14. Response.Clear();
  15. string myUserName = Request.QueryString["username"];
  16.  
  17. string myAge = Request.QueryString["age"];
  18. if (myUserName == "12" && myAge == "23")
  19. {
  20. Response.Write("yes");
  21. }
  22. else {
  23. Response.Write("no");
  24. }
  25. Response.End();
  26. }
  27. }
  28. }</span></span>

说明:在这一步获取HTMLPage1所传送过来的数据,并对此做出响应。

2.4,测试结果

说明:本次测试要想实现的效果是,当姓名和年纪的输入框中填入的数据分别为12和23时,在服务端的响应是“yes”,而其他的数据响应是“no”。再根据服务器端的响应数据发送到页面做出显示,yes=“134”,no=“asdg”.

三、总结

我们说既然已经有了JQ封装好的方法,为什么还要了解JS的具体封装,那么JQ是用什么实现的?这版代码一直在参考,为了写出这版代码,看了很多别的代码,写毁了好多行代码。但是现在看代码的能力又不一样了。

接下来要了解的是,JQ是怎么封装的,它和JS封装的有什么不同,从而进一步区分JS和JQ的联系,再是运用到整个BS开发中的作用和区别。

【Ajax 3】JavaScript封装Ajax的更多相关文章

  1. 原生JavaScript 封装ajax

    原生JavaScript 封装ajax   function myajax(options){ //新建一个局部对象 用来存放用户输入的各种参数 var opt={ type:options.type ...

  2. JavaScript封装Ajax工具函数及jQuery中的ajax,xhr在IE的兼容

    封装ajax工具函数 首先要思考:1.为什么要封装它?提高开发效率2.把一些不确定的情况考虑在其中 a. 请求方式 b. 请求地址 c. 是否异步 d. 发送参数 e. 成功处理 f. 失败处理3.确 ...

  3. 原生javascript封装ajax和jsonp

    在我们请求数据时,完成页面跨域,利用原生JS封装的ajax和jsonp: <!DOCTYPE html> <html lang="en"> <head ...

  4. JavaScript封装Ajax(类JQuery中$.ajax()方法)

    ajax.js (function(exports, document, undefined){ "use strict"; function Ajax(){ if(!(this ...

  5. ajax 原生js封装ajax [转]

    /* 封装ajax函数 * @param {string}opt.type http连接的方式,包括POST和GET两种方式 * @param {string}opt.url 发送请求的url * @ ...

  6. 原生JavaScript封装Ajax

    第一次开个人技术博客了,发的第一篇技术文章,欢迎指点…… 欢迎访问本人的独立博客:蓝克比尔 Ajax的实现主要分为四部分: 1.创建Ajax对象 // 创建ajax对象 var xhr = null; ...

  7. javascript - 封装ajax

    封装,使用有示例. // 封装示例: function ajax(url, method, params, done) { var xhr = null; method = method.toUppe ...

  8. 【Ajax 2】封装Ajax的核心对象:XMLHttpRequest对象

    导读:AJAX利用一个构建到所有现代浏览器内部的对象-XMLHttpRequest-来实现发送和接收HTTP请求与响应信息.那么,XMLHttpRequest对象是怎么创建和封装的呢? 一.简介 1. ...

  9. 封装Ajax和跨域

    目录 引言 封装ajax 案例:使用自封装ajax 案例:动态加载瀑布流 跨域 引言 对于Ajax现在相信大家已经不会陌生了,无论是原生的XMLHttpRequest方式发送还是通过jQuery框架中 ...

随机推荐

  1. salt-stack系列报错

    master启动报错 实验环境为: [root@master salt]# cat /proc/version Linux version 3.10.0-327.el7.x86_64 (mockbui ...

  2. laravel 权限管理 常用命令

    use Spatie\Permission\Models\Role;use Spatie\Permission\Models\Permission; $role = Role::create(['na ...

  3. CF982C Cut 'em all!

    思路: 在深搜过程中,贪心地把树划分成若干个连通分支就可以了.划分的条件是某个子树有偶数个节点.注意到在一次划分之后并不需要重新计数,因为一个数加上一个偶数并不影响这个数的奇偶性. 实现: #incl ...

  4. hihocoder offer收割编程练习赛9 B 水陆距离

    思路: 宽搜,多个起点. 实现: #include <iostream> #include <cstdio> #include <algorithm> #inclu ...

  5. tcpdump 使用详解——转载

    http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 简介 用简单的话来定义tcpdump,就是:dump the traf ...

  6. Java垃圾回收机制分析

    Java的堆是一个运行时数据区,类的实例从中分配空间,堆中存储着正在运行的应用程序所建立的所有对象.垃圾回收是一种动态存储管理技术.它按照特定的垃圾回收算法,自动释放掉不再被引用的对象.堆内存里垃圾的 ...

  7. Oracle创建用户及权限设置

    oracle用户创建及权限设置 权限: create session create table unlimited tablespace connect resource dba 例: #sqlplu ...

  8. TebsorFlow低阶API(五)—— 保存和恢复

    简介 tf.train.Saver 类提供了保存和恢复模型的方法.通过 tf.saved_model.simple_save 函数可以轻松地保存适合投入使用的模型.Estimator会自动保存和恢复 ...

  9. vue 高度 动态更新计算 calcHeight watch $route

    vue 高度 动态更新计算 calcHeight () { // this.tableHeight = window.innerHeight - 210 } }, mounted () { // co ...

  10. iview分析