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 请求的相关知识,希望对大家有所帮助。
本文向大家介绍Linux下模拟实现进度条实例详解,包括了Linux下模拟实现进度条实例详解的使用技巧和注意事项,需要的朋友参考一下 Linux下模拟实现进度条 在Linux系统下模拟进度条,首先需要了解一些简单基础知识: 1、在Linux系统下,\r是回车符,\n是换行符,回车是行不变光标回到该行的起始位置,换行是跳转到下一行,但是光标位置不变; 2、C\C++的输入输出都有缓冲
本文向大家介绍ajax请求json数据案例详解,包括了ajax请求json数据案例详解的使用技巧和注意事项,需要的朋友参考一下 今天有这样一个需求,点击六个大洲,出现对应的一些请求信息,展示在下面,请求请求过后,第二次点击就无需请求。 如图所示:点击北美洲下面出现请求的一些数据 html代码结构: css样式: json格式: js代码:
本文向大家介绍Springmvc ajax跨域请求处理方法实例详解,包括了Springmvc ajax跨域请求处理方法实例详解的使用技巧和注意事项,需要的朋友参考一下 上次给一个网站写网站 前后端分离 最后跪在ajax跨域上面了 自己在网上找了个方法 亲试可用 记录一下 写一个类 继承HandlerInterceptorAdapter 然后在xml里面配置一下路径 这样就可以了 不过
本文向大家介绍解决拦截器对ajax请求的拦截实例详解,包括了解决拦截器对ajax请求的拦截实例详解的使用技巧和注意事项,需要的朋友参考一下 解决拦截器对ajax请求的的拦截 拦截器配置: 1、判断 String XRequested =request.getHeader("X-Requested-With") 的值,目的是判断是否是ajax请求。 2、response.getWriter().wr
本文向大家介绍PHP模拟http请求的方法详解,包括了PHP模拟http请求的方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP模拟http请求的方法。分享给大家供大家参考,具体如下: 方法一:利用php的socket编程来直接给接口发送数据来模拟post的操作。 建立两个文件post.php,getpost.php post.php内容如下: getpost.php的内容如下
本文向大家介绍Android 跨进程模拟按键(KeyEvent )实例详解,包括了Android 跨进程模拟按键(KeyEvent )实例详解的使用技巧和注意事项,需要的朋友参考一下 Android 解决不同进程发送KeyEvent 的问题 最近在做有关于Remote Controller 的功能,该功能把手机做成TV的遥控器来处理。在手机的客户端发送消息到TV的android 服务端,服务端