Mockjax动态模拟在' dataType="Script" '时停止工作
Mockjax dynamic mock stops working with `dataType="Script"`
我有一个使用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从不使用Mockjax提供的模拟XHR对象。
所以本质上,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请求中。我不建议这样做,因为在以后删除mock时需要删除这一行。
感谢@Nicholas Cloud给我发短信,让我注意到这个问题。
是否在模拟端点中设置dataType
属性 ?
见:https://github.com/appendto/jquery-mockjax数据类型
如果是,您是否尝试将模拟数据类型设置为application/javascript
?
$.mockjax({
type: "GET",
dataType: "application/javascript",
url: "myfile.js?_=1395314460347",
responseText: "(function () { alert('hello world!'); }());"
});
$.ajax({
type: "GET",
dataType: "script",
url: "myfile.js?_=1395314460347"
});
相关文章:
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- "日期“;AJAX请求返回的类型值未定义
- 在<script src=“"></脚本>标签
- 显示“<script src='some.js'></脚本>"在Html文档中
- 类似于htmls<script src=“">xaml的标签
- 为什么可以't我将JS代码置于<script src=“">代码</脚本>
- 将用户输入动态地附加到<script src=“">来自Java Script中的文本框
- 可以't添加<script src=“"到使用Window.open().docent.writ
- 在Google Apps Script中使用编译ES6 =>ReferenceError:“SomeClass"
- & lt;脚本src =“X"祝辞& lt; / script>内部返回渲染| React