2017-03-02 103 views
1

目標:顯示pdf文件,作爲服務器在新窗口中使用燼的響應收到。無法在瀏覽器中使用餘燼閱讀pdf內容

代碼在路由文件:

actions: { 
    pdfClick(assessmentId) { 
     var result = []; 
     return new Ember.RSVP.Promise(function (resolve, reject) { 
     Ember.$.ajax({ 
      type: 'GET', 
      url: 'http://localhost:4200/abc/secured/rest/questions/166', 
      success: function (data) { 
      var winlogicalname = "detailPDF"; 
      var winparams = 'dependent=yes,locationbar=no,scrollbars=yes,menubar=yes,' + 
       'resizable,screenX=50,screenY=50,width=850,height=1050'; 

      var detailWindow = window.open("content-type:application/pdf"); 
      detailWindow.document.write(data); 
      }, 
      error: function (request, textStatus, error) { 
      console.log(error); 
      } 
     }); 
     }); 
    } 
    } 

困惑:

var detailWindow = window.open("content-type:application/pdf"); 
detailWindow.document.write(data); 

在window.open,我們設置內容類型爲application/PDF,然後我們什麼時候嘗試寫入數據(從服務器收到的PDF文件的字節流),垃圾數據出現在新窗口中。

如果我通過Chrome瀏覽器訪問該服務,Chrome能夠顯示PDF,但如果我使用ember ajax訪問相同的服務,我無法在新窗口中顯示PDF。

回答

0

問題是關於jQuery。 jQuery不處理二進制數據(Reference)。當你的服務器發送二進制文件時,你不能處理這個請求。

你有不同的選擇:

  1. 使用Base64加密運輸二進制數據:其實我不喜歡它,因爲它的開銷。
  2. 使用純XMLHttpRequest而不是jQuery:我已經在我當前的項目中使用了它,它的工作原理!但是代碼太多,很難追蹤和維護。需要包裝Ember.Promise。我的實現非常接近這些答案:12
  3. 使用jQuery傳輸器:我看到它,但還沒有使用它。我不知道它是否工作。如果你想看,這裏是reference
相關問題