我试图在我的客户端上显示"掩码",而文件是动态生成的服务器端.似乎推荐解决此问题(因为它不是ajax)是使用iframe并从onload或done事件中侦听以确定文件何时实际从服务器传送到客户端.
这是我的角度代码:
var url = // url to my api
var e = angular.element("<iframe style='display:none' src=" + url + "></iframe>");
e.load(function() {
$scope.$apply(function() {
$scope.exporting = false; // this will remove the mask/spinner
});
});
angular.element('body').append(e);
Run Code Online (Sandbox Code Playgroud)
这在Firefox中运行良好但在Chrome中没有运气.我也试过使用onload函数:
e.onload = function() { //unmask here }
Run Code Online (Sandbox Code Playgroud)
但我也没有运气.
想法?
我试图使用jquery ajax下载二进制音频文件.
通常我会发出这样的命令:
windows.location.href = 'http://marksdomain(dot)com/audioFile.wav' ;
Run Code Online (Sandbox Code Playgroud)
但是,最近我们的服务器等待响应的时间太长了,我得到一个讨厌的网关超时消息.
有人建议我使用jquery-ajax,这是有道理的,因为那时我会更多地控制超时.
这是我到目前为止玩过的代码:
$.ajax({
url: 'http://marksdomain(dot)com/audioFile.wav',
timeout: 999999,
dataType: 'binary',
processData: false, // this one does not seem to do anything ?
success: function (result) {
console.log(result.length);
},
error: function (result, errStatus, errorMessage) {
console.log(errStatus + ' -- ' + errorMessage);
}
};
Run Code Online (Sandbox Code Playgroud)
当我省略"dataType"时,二进制文件的大小比服务器上实际大三倍.但是,当我使dataType等于"binary"时,ajax会抛出一个错误:
"No conversion from text to binary"
Run Code Online (Sandbox Code Playgroud)
从一些早期的帖子中,听起来好像jquery-ajax无法以这种方式处理二进制文件.
我确实发现了Delivery.js,它实际上对我正在尝试的东西非常有效,但我宁愿不使用节点解决方案.
有什么建议?