javascript - $.ajax 之后编码错误的 Blob
问题描述
我创建了一个从后端恢复字符串并将其放入 blob 的应用程序。
我用 fetch 和 async-await 写的。问题是EI11不支持它们。
我可以通过$.ajax
GET请求轻松重写。
当我使用 fetch 时,我可以毫无问题地从 URL 中检索 blob。
我得到一个对象作为响应,身体作为ReadableStream
.
当我使用 时$.ajax
,我只返回一个字符串。当我把它放在一个blob中时,我得到了不同的结果。
例如,使用 fetch 我的 blob URL 如下所示:
Response: F)D�=C�w�Cu9mc�
Preview: F)D�=C�w�Cu9mc�
User window: F)DØ=CŠwºCu9mcœ
Content-Length: 16
Content-Type: text/html
这样我就可以得到预期的正确结果。
但随着 $.ajax
:
Response: F)D�=C�w�Cu9mc�
Preview: F)D�=C�w�Cu9mc�
User window: F)D�=C�w�Cu9mc�
Content-Length: 24
Content-Type: text/html
如果我控制台记录 blob,我还会看到内容长度的差异。
我真的不想用外部库重写应用程序,或者将其调整为 babel。但我需要 EI11支持。
我的获取代码:
var res = null;
res = await fetch( window.location.origin +"url_path");
const blob = await res.blob();
var objectURLL = URL.createObjectURL(blob);
settings.clip.token_old = settings.blob_prefix+objectURLL.split("/")[3];
我的$.ajax
代码:
var blob = null;
var objectURL = null;
$.ajax({
url: "url_path"
contentType: 'text/html ; charset=utf-8',
success: function (res){
blob = new Blob([res],{type:"text/html"});
objectURL = URL.createObjectURL(blob);
},
async: false
});
也试过:
blob = new Blob([BOM, res],{encoding:"UTF-8",type:"text/html;charset=UTF-8"});
和:
blob = new Blob([BOM, res],{type:"text/html;charset=UTF-8"});
我发现了一个向 blob 添加 BOM 的主题,以强制浏览器正确读取它。
像这样:
var BOM = new Uint8Array([0xEF,0xBB,0xBF]);
blob = new Blob([BOM, res],{encoding:"UTF-8",type:"text/html;charset=UTF-8"});
这在浏览器中给了我这个:
F)D�=C�w�Cu9mc�
Content-Length: 27
Content-Type: text/html
但它并不真正等于原始字符串,对我不起作用。
解决方案
推荐阅读
- java - Reactor - RxJava - “在因果链中发现重复,因此裁剪以防止循环”使用 Flux 时
- java - frame.dispose() 不工作。可能是实例化对象问题?
- mysql - Max() 函数和其他列的问题
- reactjs - npm install 不会修改 react app 中的 package.json
- actions-on-google - 除了 iOS 上的 Google Home 外,Action 无处不在
- css - Blazor 客户端项目中的引导导航项目未正确呈现
- c++ - 在 Linux 系统中实现 cat
- javascript - 用JS计算总价
- javascript - 如何从另一个文件引用 Node.js 中的变量
- javascript - 从 HTML 中的下载按钮下载 API 生成的图像