Ajax入门(二)Ajax函数封装
如果看了的我上一篇博客《Ajax入门(一)从0开始到一次成功的GET请求》的话,肯定知道我们已经完成了一个简单的get请求函数了。如下:
1 |
/** |
为什么要继续进行Ajax函数封装?
原因如下:
- 目前方法只能使用get请求,而不能使用post请求,而在用户注册时必须使用POST,因为POST,现在不够完整。
- 目前请求参数只能直接写在url里,不利于动态获取数据,应该使用参数解析的方式,便于使用。
- get请求方式请求缓存问题。
- 学习封装方法,
改造目标
1 |
function ajax(url, options) {
|
options是一个对象,里面可以包括的参数为:
- type: post或者get,可以有一个默认值
- data: 发送的数据,为一个键值对象或者为一个用&连接的赋值字符串
- onsuccess: 成功时的调用函数
- onfail: 失败时的调用函数
改造开始(三步)
(一)原函数的改造
形参中,删除fnSucc、fnFaild 添加options。使成功与失败执行的函数变成options对象的 onsuccess、onfail两个方法对应的值。
主要是在4、接收返回部分进行更改,如下
1 |
//4.接收返回 |
(二)请求参数的处理
首先我们要知道的是在使用请求参数存在时,GET方式的请求参数特别简单。直接在url后面添加?参数名=参数值&参数名二=参数值二
实现思路:
- 首先判断options.data是否存在,不存在时使用
"?timestamp= + new Date().getTime();链接在url后,以清除缓存。- 这里只是我使用的方法,这里的timestamp可以随意更改
new Date().getTime();也可以用Math.random();主要是保持每次请求的url都不一样。- 还有许多别的方法参考Ajax缓存问题怎么解决?。有兴趣的自己再多google一下吧。
- 存在options.data时,应该限制请求data格式便于处理,设定为JSON(当然没必要像JSON那么严格,但是应该保持键值对的格式)。
- 使用for in 遍历data,使用
=来连接键与值,使用&来连接多个请求参数 - 只需要对原函数中的2.连接服务器进行更改
实现如下:
原:
1 |
//2.连接服务器 |
现:
1 |
//open(方法,url,是否异步) |
(三)请求类型选择
使用post发送数据,模拟form提交。在url看不到请求参数,更加安全。
实现思路:
- 判断是否type是否存在,存在时转为大写,默认为GET请求。
- 判断请求的类型,GET 或 POST 。
- 在使用post请求提交数据时,请求参数不跟在url后面。
使用post请求数据必须添加在
open()与send()直接添加头信息。xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
使用post请求数据,对2.连接服务器、3.发送请求部分进行处理
实现如下:
原:
1 |
//2.连接服务器 |
现:
1 |
//3.发送请求 |
最终完成
结合之前写的,集合起来。
1 |
/** |
最终完成就是这样了。当然还远远算不上完美,比如
try catch的使用 ,但是通过这样的封装,还是学到很多知识。
From:http://guowenfh.github.io/2015/12/18/Ajax-elementary-course-2-fn/
Ajax入门(二)Ajax函数封装的更多相关文章
- {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)
Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...
- {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)
{Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) Django基础七之 ...
- Ajax入门(二)
接收服务器返回的消息 1,定义触发Ajax的js效果 2,创建Ajax方法 如果返回的数据是XML,则需使用aj.responseXML 3,接收服务器返回的消息,并显示在网页上 错误案例:直接接收服 ...
- Python入门二:函数
一.函数的定义和使用 1.基本结构: def 函数名(参数): """ 文档字符串 """ 函数体 返回值 2.函数名: 和变量名命名规则一 ...
- 定时器中的this和函数封装的简单理解;
一.定时器中的this: 不管定时器中的函数怎么写,它里面的this都是window: 在函数前面讲this赋值给一个变量,函数内使用这个变量就可以改变this的指向 二.函数封装 函数封装是一种函数 ...
- rxjs入门3之项目中ajax函数封装
项目中ajax函数封装 ⽹页应⽤主要数据源有两个:⼀个是⽹页中的DOM事件,另⼀个就是通过AJAX获得的服务器资源.我们已经知道fromEvent这个操作符可以根据DOM事件产⽣Observable对 ...
- 对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache
虽然jquery的较新的api已经很好用了, 但是在实际工作还是有做二次封装的必要,好处有:1,二次封装后的API更加简洁,更符合个人的使用习惯:2,可以对ajax操作做一些统一处理,比如追加随机数或 ...
- 对jquery的ajax进行二次封装
第一种方法: $(function(){ /** * ajax封装 * url 发送请求的地址 * data 发送到服务器的数据,数组存储,如:{"username": " ...
- 轻松搞定Ajax(分享下自己封装ajax函数,其实Ajax使用很简单,难是难在你得到数据后来怎样去使用这些数据)
hey,guys!今天我们一起讨论下ajax吧!此文只适合有一定ajax基础,但还是模糊状态的同志,当然高手也可以略过~~~ 一.概念 Ajax(Asynchronous Javascript + X ...
随机推荐
- map和reduce 个数的设定 (Hive优化)经典
一. 控制hive任务中的map数: 1. 通常情况下,作业会通过input的目录产生一个或者多个map任务. 主要的决定因素有: input的文件总个数,input的文件大小,集群设置 ...
- hive_学习_00_资源帖
一.官方资料 二.参考资料
- EF ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象
今天编码过程中遇到这个问题,用EF 更新数据库,将组织好的数据传递到ef的上下文中,本以为附加上去更新,一切就ok了,不过事实证明没这么顺利 ----------------------------- ...
- MySQL引擎各个引擎对比介绍
1.什么是存储引擎? 存储引擎类似于录制的视频文件,可以转换成不同的格式,如MP4,avi等格式,而存储在我们的磁盘上也会存在于不同类型的文件系统中如:Windows里常见的NTFS,fat32等.存 ...
- git 远程库 创建私钥
1.创建SSH Key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步.如果没有,打开Shell(W ...
- mysql1130远程连接没有权限的解决方法
网上查了半天,终于解决 远程连接没有权限的原因有两种,一个是因为mysql的限制,一个是防火墙的限制. ,解决防火墙限制: 在mysql服务主机上将防火墙关闭或者在防火墙高级设置里面加入出入站规则,加 ...
- Unity3D教程:制作与载入AssetBundle
通常我们在游戏程式执行过程,并不希望一次将全部的资源都载入,而比较希望实际上有使用到的才载入,以免占用多余的记忆体,所以我们可能会尽量规划好不同功能的场景,在需要时才载入场景并释放掉前个场景中不需要的 ...
- BZOJ2784: [JLOI2012]时间流逝
BZOJ2784: [JLOI2012]时间流逝 https://lydsy.com/JudgeOnline/problem.php?id=2784 分析: 挺有意思的一道题. 注意到状态数是\(P( ...
- HttpContext是干什么的
这是MSDN对HttpContext的说明: HttpContext 类:封装有关个别 HTTP 请求的所有 HTTP 特定的信息. (网上说是上下文信息,啥又叫上下文呢?个人感觉说的不 ...
- python 集合和深浅copy
#1数据类型的补充#2.集合set#3.深浅copy 补充:str --> bytes s.encode('gbk')bytes --> str s.decode('gbk') 1.数据类 ...