实例详解jQuery Mockjax 插件模拟 Ajax 请求


Posted in Javascript onJanuary 12, 2016

1. 原理

jquery-mockjax是用于mock 前台ajax向后台请求的返回数据。

原理很简单

在你js代码要发送ajax请求的地方断点一下,然后比较在【引入jquery-mockjax】 和 【没有引入jquery-mockjax】的情况下$.ajax.toString()的值情况。

很明显,引入jquery-mockjax时,这个mock库会对jquery提供的ajax函数做替换。这样就很容易能mock起来。

在实际的开发过程中,前端后台协商好了统一的接口,就各自开始自己的任务了。这时候我有这么一个 Ajax 请求需要从后台获取数据:

$.ajax({
url: '/products/'
}).done(function(res) {
$('#result').html(res);
});

但是这个服务可能还没有创建,也许是后台开发那个小伙子(就是那些使用 PHP、Ruby、.NET、GoldFusion 等等语言的帅哥们)开小差去了,也许是他忙于其它事情。总之,当这个请求发出的时候我不能得到我想要的结果,我只能得到一个 404 (Not Found) 错误。

这实在是很糟糕,催促也没有用,旁边的测试人员吵着闹着要测试呢,而我自己也迫切希望看到立竿见影的效果。这个时候,就只能依靠自己了,其中一个比较好的方法就是模拟 Ajax 请求,这里我使用 jQuery Mockjax 插件。

地址:jQuery Mockjax

这是一个 jQuery 插件,将其下载下来引用的时候放在 jQuery 之后:

<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<div id="result"></div>
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="vendor/jquery.mockjax.js"></script>
</body>
</html>

然后在请求代码之前执行模拟请求的代码,使用该插件提供的 $.mockjax() 方法,暂时先指定2个参数 url 和 responseText:

$.mockjax({
url: '/products/',
responseText: 'Here you are!'
});

它会监测具有相同 url 的 Ajax 请求并在请求发出时拦截同时模拟响应,responseText 的值就是模拟的响应内容,这样我的程序就能愉快地执行了,最开始那个例子的运行结果就是 'Here you are' 这段内容将会显示到 div#result 中。当我不再需要模拟请求的时候可以使用 $.mockjax.clear() 方法清除掉:

$.mockjax.clear();

一旦后台服务开发完成,我就可以使用该方法清除掉所有模拟请求体验真实的请求效果了。如果不希望一次性清除掉所有的模拟请求,而是针对某个模拟请求,可以传入该模拟请求的 ID,每个模拟请求都会返回一个 ID 值:

var idOne = $.mockjax({ }),
idTwo = $.mockjax({ });
$.mockjax.clear(idTwo);

这样就把第二个模拟请求清除掉了,保留了第一个。

由于 Ajax 请求的 url 地址要和模拟请求的 url 对应,假设页面上有很多请求,每个请求都去模拟的话就会感觉很痛苦,好在,该插件的 url 参数提供了一个通配符 * 方式:

$.mockjax({
url: '/books/*'
});

这样除了可以匹配 url 地址为 /books/cook 的请求还可以匹配地址为 /books/math 等等更多请求,甚至还可以使用正则表达式进行更复杂的匹配模式:

$.mockjax({
url: /^\/data\/(cook|math)$/i
});

使用插件的 data 参数可以根据不同的请求数据执行不同的模拟响应:

$.mockjax({
url: '/books/',
data: {
type: 'cook'
},
responseText: 'You want a cook book!'
});
$.mockjax({
url: '/books/',
data: {
type: 'math'
},
responseText: {
"content": "You want a math book!"
}
});

就算是同一个 url 地址当请求的数据不同的时候获得的响应内容也不一样。响应内容除了纯文本字符串,也可以使用 json
格式的字符串。

该插件还提供了一个默认参数设置对象 $.mockjaxSettings,没有指定的参数都将使用这些默认值:

$.mockjaxSettings = {
logging: true,
status: 200,
statusText: "OK",
responseTime: 500,
isTimeout: false,
throwUnmocked: false,
contentType: 'text/plain',
response: '',
responseText: '',
responseXML: '',
proxy: '',
proxyType: 'GET',
lastModified: null,
etag: '',
headers: {
etag: 'IJF@H#@923uf8023hFO@I#H#',
'content-type' : 'text/plain'
}
};

将默认值修改之后,后面的模拟请求都会使用修改后的值:

$.mockjaxSettings.contentType = "application/json";

这里只修改了其中的 contentType 的默认值。

以上所述通过实例详解jQuery Mockjax 插件模拟 Ajax 请求的相关知识,希望对大家有所帮助。

Javascript 相关文章推荐
prototype 1.5 &amp; scriptaculous 1.6.1 学习笔记
Sep 07 Javascript
jQuery参数列表集合
Apr 06 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
May 07 Javascript
JS将秒换成时分秒实现代码
Sep 03 Javascript
开源的javascript项目Kissy介绍
Nov 28 Javascript
JavaScript中的this关键字使用方法总结
Mar 13 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
Dec 11 Javascript
Three.js入门之hello world以及如何绘制线
Sep 25 Javascript
vue: WebStorm设置快速编译运行的方法
Oct 18 Javascript
利用Vue实现一个markdown编辑器实例代码
May 19 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
May 14 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
Aug 06 Javascript
JavaScript实现输入框(密码框)出现提示语
Jan 12 #Javascript
javascript自动恢复文本框点击清除后的默认文本
Jan 12 #Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
Jan 12 #Javascript
jquery模拟实现鼠标指针停止运动事件
Jan 12 #Javascript
js实现字符串和数组之间相互转换操作
Jan 12 #Javascript
js右下角弹出提示框示例代码
Jan 12 #Javascript
jquery插件EasyUI中form表单提交实例分享
Jan 11 #Javascript
You might like
生成静态页面的PHP类
2006/07/15 PHP
PHP生成静态页面详解
2006/12/05 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
2013/02/05 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
jquery仿微信聊天界面
2017/05/06 jQuery
web.js.字符串与正则表达式操作
2017/05/13 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
JavaScript数据结构之优先队列与循环队列实例详解
2017/10/27 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
python自动化报告的输出用例详解
2018/05/30 Python
python求质数的3种方法
2018/09/28 Python
python 将日期戳(五位数时间)转换为标准时间
2019/07/11 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
Python爬取网页信息的示例
2020/09/24 Python
简述Html5 IphoneX 适配方法
2018/02/08 HTML / CSS
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
文科教师毕业的自我评价
2014/01/16 职场文书
青春寄语大全
2014/04/09 职场文书
论文指导教师评语
2014/04/28 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
师德承诺书
2015/01/20 职场文书
支教个人总结
2015/03/04 职场文书
我是特种兵观后感
2015/06/11 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
python 爬取吉首大学网站成绩单
2021/06/02 Python
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS
Redis 持久化 RDB 与 AOF的执行过程
2021/11/07 Redis