使用<iframe>下载:只运行一次

时间:2015-08-06 09:22:20

标签: javascript angularjs internet-explorer iframe

我有一个webservice给我发送一个excel文件,通过Ajax调用以下逻辑:

&#xA;&#xA;
    &#xA;
  1. 发送“创建文件“请求。
  2. &#xA;
  3. 要求进度,服务器将返回0到100之间的数字,客户端将使用它更新进度条。
  4. &#xA;
  5. 一旦收到100更新iframe的“src”元素,以便开始下载
  6. &#xA;
&#xA;&#xA;

使用iframe下载到目前为止,唯一的方法是下载互联网浏览器,所以我想保留它。

&#xA;&#xA;

这些是我的iframe和进度条:

&#xA;&#xA;
 < code>&lt; iframe width =“1”height =“1”style =“display:none”src =“{{downloadLink}}”&gt;&lt; / iframe&gt;&#xA;&#xA;&lt; progressbar class =“progress”value =“reportProgress”type =“success”&gt;&#xA; {{reportProgressL}}&#XA; &lt; / progressbar&gt;&#xA;  
&#xA;&#xA;

这是我的角度js程序:

&#xA;&#xA;
  $ scope.startDownload = function(){&#xA; $ scope.reportProgress = 0;&#xA; $ scope.reportProgressL =“0%”;&#xA;&#xA; var promise = $ http.get('/ myServiceCall / createFile');&#xA; promise.then(&#xA; function(payload){&#xA; console.log('success');&#xA; console.log(payload);&#xA;},&#xA; function(错误){&#xA; $ scope.showAlert('danger',error);&#xA;});&#xA;&#xA; $ scope.askProgress();&#xA;};&#xA;&#xA;&#xA; $ scope.askProgress = function(){&#xA; $ http.get('/ myServiceCall / progress')。success(function(response,status,headers,config){&#xA;&#xA; $ scope.reportProgress = response.data;&#xA; if(response) .data&lt; 100){&#xA; $ scope.reportProgressL = response.data +“%”;&#xA; $ timeout(function(){$ scope.askProgress();},1000);&#xA; } else {&#xA; console.log('服务器精化完成,下载应该很快开始...');&#xA; $ scope.reportProgressL =“完成!”;&#xA; $ scope.downloadLink =' / myServiceCall / getFile'; //设置src iframe属性:这将开始下载&#xA;}&#xA;})。error(function(err,status,headers,config){&#xA; alert('Error :'+ err +“”+ status);&#xA;});&#xA;};&#xA;  
&#xA;&#xA;

以上代码工作正常......但只有一次!除非重新加载页面设置,否则“src”属性将不会执行任何操作。为什么

&#XA;

1 个答案:

答案 0 :(得分:1)

问题是,当您设置src属性时,新值与旧值相同。浏览器未检测到它已更改,并且未重新加载iframe。您应该尝试使用随机值设置?random=###参数,以便属性更改。