jQuery Mockjax插件模拟Ajax请求实例教程

在实际的开发过程中,前端后台协商好了统一的接口,就各自开始自己的任务了。这时候我有这么一个 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 的默认值。

时间: 2024-10-30 15:53:02

jQuery Mockjax插件模拟Ajax请求实例教程的相关文章

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

1. 原理 jquery-mockjax是用于mock 前台ajax向后台请求的返回数据. 原理很简单 在你js代码要发送ajax请求的地方断点一下,然后比较在[引入jquery-mockjax] 和 [没有引入jquery-mockjax]的情况下$.ajax.toString()的值情况. 很明显,引入jquery-mockjax时,这个mock库会对jquery提供的ajax函数做替换.这样就很容易能mock起来. 在实际的开发过程中,前端后台协商好了统一的接口,就各自开始自己的任务了.这

jQuery DataTables插件自定义Ajax分页实例解析_jquery

一.问题描述 园友是做前端的,产品经理要求他使用jQuery DataTables插件显示一个列表,要实现分类效果. 后端的分页接口已经写好了,不涉及条件查询,需要传入页码(pageNo)和页面显示数据条数(pageSize),显示相应页的显示记录,且不能修改后端接口. 二.分析 先来分析下分页实现.一是后端分页:这种情况下,在后端很容易实现,在官网上有示例,不多说明.二是前端分页:前端分页也是支持的,不过需要一次把所有数据都获取到才可以. 看到这里,问题来了.由于后端在目前的情况下是更改不了,

jQuery 实现异步跨域请求实例教程

   代码如下 复制代码 window.demo = { "txt" : "Hello World" } 这就是所谓的 JSONP,把数据以 JSON 的格式保存在一个对象中,方便我们之后去引用这个对象. 然后,我们就可以用 getScript 的方法去异步加载刚才保存的 JS,并处理返回结果,方法如下:  代码如下 复制代码 var url = 'http://xxx.xxx/demo.js'; var success = function() { alert(w

jquery使用jquery.zclip插件复制对象的实例教程_jquery

复制代码 代码如下: <script type="text/javascript" src="js/jquery.js"></script><script type="text/javascript" src="js/jquery.zclip.min.js"></script> 复制代码 代码如下: $(function(){    $('#copy_input').zclip(

JS 拦截全局ajax请求实例解析_javascript技巧

你是否有过下面的需求:需要给所有ajax请求添加统一签名.需要统计某个接口被请求的次数.需要限制http请求的方法必须为get或post.需要分析别人网络协议等等,那么如何做?想想,如果能够拦截所有ajax请求,那么问题就会变的很简单!?,少年,想法有点大胆,不过,我欣赏!直接上轮子,Ajax-hook不仅可以满足你想要的,同时可以给你更多. Ajax-hook源码地址 : https://github.com/wendux/Ajax-hook 如何使用 1.引入ajaxhook.js <scr

jQuery validate插件实现ajax验证重复的2种方法_jquery

本文实例讲述了jQuery validate插件实现ajax验证重复的2种方法.分享给大家供大家参考,具体如下: jquery validate 经过这种多年的改良,已经很完善了.它能满足80%的验证需要,如果validate自带的功能,不能满足我们需求,它提供了addMethod来扩展功能.下面就举个小例子来说明一下addMethod的用法. 完整demo实例代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//

jquery 弹出层ajax登陆实例代码

jquery 弹出层ajax登陆实例代码 jQuery(document).ready(function(){  jQuery('.login_show').click(function(){   var xmlhttp=createxmlhttp();   if(!xmlhttp)   {    alert("你的浏览器不支持XMLHTTP!!");    return;   }   var  Digital=new  Date();   Digital=Digital+40000;

PHP and AJAX responseXML 实例教程

PHP and AJAX responseXML 实例教程 AJAX技术可以用来恢复的数据库信息为XML . AJAX的数据库为XML的例子 在AJAX以下例子,我们将演示如何网页上可以卖到信息从一个MySQL数据库,它转换为一个XML文档,并用它来显示信息在几个不同的地方. 这个例子我似乎很像" PHP的AJAX技术数据库"例如,在最后一章,但是有一个很大的不同:在这个例子中我们得到的数据从PHP的XML网页使用responseXML功能. 接收的响应作为XML文件使我们能够更新这个

非常简单的Ajax请求实例附源码

Ajax不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术.通过Ajax,您可以使用 JavaScript的XMLHttpRequest对象来直接与服务器进行通信.您可以在不重载页面的情况与 Web 服务器交换数据.在本文的例子中,我们将演示当用户向一个标准的HTML表单中输入数据时网页如何与web服务器进行通信. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo