javascript - Mockjax 动态模拟停止使用 `dataType="脚本”`

标签 javascript mockjax

我有一个使用 mockjax 的动态模拟设置,它适用于我的大部分 ajax 请求,但是当 dataType 设置为 Script 时失败,并允许请求落入常规 Ajax 处理程序。

// gets mocked
$.ajax({
    type: "GET",
    url: "http://myurl.com/myfile.js?_=1395314460347"
})

// does not get mocked!
$.ajax({
    type: "GET",
    dataType: "script",
    url: "http://myurl.com/myfile.js?_=1395314460347"
})

我如何在 mockjax 中配置动态 mock 以拦截带有 dataType 集的请求?


更新:mockjax 定义的示例代码

我正在创建动态模拟,所以我是通过函数而不是普通对象来定义的,就像这样......

$.mockjax(function(settings) {
  // settings.url == '/restful/<service>'
  var service = settings.url.match(/\/restful\/(.*)$/);
  if ( service ) {
    return {
      proxy: '/mocks/' + service[1] + '.json',
      // handle `dataType: 'script'`
      dataType: 'application/javascript'
    };
  }
  return;
});

最佳答案

这似乎是 Mockjax 如何处理跨域脚本请求的错误。它没有做任何特殊的事情来检测跨域请求(就像它对 JSONP 所做的那样),因此,当它将请求传递回原始 $.ajax 方法时——jQuery 从不使用模拟的 XHR它是由 Mockjax 提供的对象。

所以从本质上讲,Mockjax 正在拦截请求,然后将其直接传递回 jQuery,它会在您身上失败。

我在这里打开了一个问题,这样就可以解决这个问题:https://github.com/appendto/jquery-mockjax/issues/136

与此同时,您有两个选择。如果你想快速修补 mockjax,将这行添加到 471 左右:

origSettings.crossDomain = false;

完成后该部分将如下所示:

mockHandler.cache = requestSettings.cache;
mockHandler.timeout = requestSettings.timeout;
mockHandler.global = requestSettings.global;

origSettings.crossDomain = false;

copyUrlParameters(mockHandler, origSettings);

另一种选择(我不建议这样做)是将 crossDomain: false 添加到您的实际 AJAX 请求中。我不推荐这样做,因为稍后删除模拟时需要删除该行。

感谢@Nicholas Cloud 联系我并提醒我注意这个问题。

关于javascript - Mockjax 动态模拟停止使用 `dataType="脚本”`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22532271/

相关文章:

javascript - JQuery Ajax 自动完成不显示结果

javascript - 我可以在 webpack 中构建 sass/less/css 而不需要在我的 JS 中使用它们吗?

jquery - Protractor 模拟 jQuery ajax

javascript - backbone.js + jquery-mockjax : fetch success handler doesn't work

jquery - QUnit:如何在不修改ajax调用的情况下测试ajax调用

javascript - 使用 AJAX 的动态级联下拉列表

javascript - 如何测试回调参数 react native

javascript - 使用 jQuery 从一个位置复制文本,以替换其他位置的文本

javascript - 必需的 `<select>` 输入错误地允许选择默认选项

angularjs - Mockjax 在 Angular 应用程序中的使用