2015-08-06 3 views
0

У меня есть вебсервис присылку файл Excel, вызов производится с помощью Ajax со следующей логикой:Скачать с <iframe>: работает только один раз

  1. Отправить «создать файл» запрос.
  2. Запросите прогресс, сервер вернет номера от 0 до 100, клиент обновит индикатор выполнения.
  3. После получения 100 обновления элемента «Src» из фрейма так, чтобы начать закачку

Скачать с IFRAME есть, до сих пор, единственный способ сделать работу скачать с интернет-проводник, так что я хотел бы сохранить его.

Это мой IFrame и прогресс бар:

<iframe width="1" height="1" style="display:none" src="{{downloadLink}}"></iframe> 

<progressbar class="progress" value="reportProgress" type="success" > 
       {{reportProgressL}} 
    </progressbar> 

И это мой угловой JS процедура:

$scope.startDownload = function() { 
    $scope.reportProgress = 0; 
    $scope.reportProgressL = "0%"; 

    var promise = $http.get('/myServiceCall/createFile'); 
    promise.then(
      function(payload){ 
       console.log('success '); 
       console.log(payload); 
      }, 
      function(error){ 
       $scope.showAlert('danger',error); 
      }); 

    $scope.askProgress(); 
}; 


$scope.askProgress = function(){ 
    $http.get('/myServiceCall/progress').success(function(response, status, headers, config){ 

     $scope.reportProgress = response.data; 
     if(response.data < 100){ 
      $scope.reportProgressL = response.data+"%"; 
      $timeout(function() {$scope.askProgress();}, 1000); 
     }else{ 
      console.log('Server elaboration completed, download should start shortly...'); 
      $scope.reportProgressL = "Done!"; 
      $scope.downloadLink = '/myServiceCall/getFile'; //setting the src iframe attribute: this will start download 
     } 
    }).error(function(err, status, headers, config){ 
     alert('Error: '+err+" "+status); 
    }); 
}; 

Приведенный выше код работает отлично ... но только один раз! Если перезагрузка страницы не будет установлена, атрибут «src» снова ничего не сделает. Зачем?

ответ

1

Проблема в том, что при установке атрибута src новое значение будет таким же, как у старого. Браузер не обнаруживает, что он изменился, и не перезагружает iframe. Вы должны попробовать установить параметр ?random=### со случайным значением, чтобы атрибут изменился.

+0

Ницца, он работает! – Phate

+0

Awesome. Рад, что смог помочь. – JosiahDaniels

Смежные вопросы