• 使用 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个参数 urlresponseText

    $.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 的默认值。

    更多乐趣,请自行探索!

  • 相关阅读:
    UNIX 高手的另外 10 个习惯
    python中的cls到底指的是什么
    一篇文章搞懂Python装饰器所有用法
    sysbench 压测
    python面向对象进阶
    python 学生表
    搞懂蓝绿发布、灰度发布和滚动发布
    数据库之视图、索引
    Java内存模型(JMM)以及 垃圾回收机制 小结
    Java线程唤醒与阻塞
  • 原文地址:https://www.cnblogs.com/xyzhanjiang/p/4195496.html
Copyright © 2020-2023  润新知