【发布时间】:2017-01-20 13:45:55
【问题描述】:
是否可以使用 JavaScript 在浏览器中拦截不是通过 XMLHttpRequest 对象 (ajax) 完成的 HTTP 请求?
我正在使用 ember-cli-mirage 模拟一个 API 服务器,它正在使用 pretender。我需要将文件上传(图像)添加到应用程序。模拟上传没有问题,因为它是由 ajax 完成的。但是我无法拦截由图像标签(非ajax请求)引起的GET请求,因为伪装者只拦截通过XMLHttpRequest完成的请求,因此无法返回“上传”的数据。
我是否也可以拦截非 ajax 请求?
如果不是:那么应该将什么视为最佳做法?这是我目前所考虑的:
- 通过 ajax 检索图像,以便我可以轻松拦截请求。例如。我可以将它们视为具有 base64 编码图像数据作为属性的 ember 数据模型。但我不确定权衡。恐怕这会导致性能问题以及可能导致图像大小 (> 1MB) 的内存泄漏。
- 传递图像请求并在 ember-cli 附带的快速服务器中处理它们。但是只有当应用程序由 ember-cli 提供时,模拟文件上传才会起作用。并且无法部署开发版本将是一个很大的权衡。
【问题讨论】:
-
如果我错了,请纠正我,但 Ajax 的 HTTP 请求不是异步的;如,请求被触发并且执行继续进行?就像,一旦发送,它就会发送。
-
@Crowes ajax 请求可以通过覆盖
XMLHttpRequest对象来模拟。例如。伪装者.js 正在使用这种方法。但这不是这里的问题。
标签: javascript ember.js mocking ember-cli-mirage pretender.js