2017-03-02 25 views
1

目的:新しいウィンドウでemberを使用してサーバーからの応答として受け取った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); 
      } 
     }); 
     }); 
    } 
    } 

混乱:我々window.openで

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

は、我々は、アプリケーション/ PDFなどのコンテンツタイプを設定していますデータ(サーバーからの応答として受信したPDFファイルのバイストリーム)を書き込もうとすると、新しいウィンドウに迷惑データが表示されます。

Chromeブラウザでサービスを利用すると、Chromeでpdfを表示できますが、同じサービスをember ajaxで使用すると、新しいウィンドウでpdfを表示できなくなります。

答えて

0

問題はjQueryに関するものです。 jQueryはバイナリデータ(Reference)を処理しません。サーバーがバイナリを送信している間は、この要求を処理できません。 base64で暗号化を使用してバイナリデータを転送

  1. は実際に私がそれを好きではないので、そのオーバーヘッドの

    は、さまざまなオプションを持っています。

  2. jQueryの代わりに純粋なXMLHttpRequestを使用します:私はこれを私の現在のプロジェクトで使用しました。しかし、コードの行が多すぎるため、追跡と保守が困難です。 Ember.Promiseとラップする必要があります。私の実装は、これらの回答に非常に近いです:12
  3. jQueryトランスポータを使用:私はそれを見ましたが、まだ使用していません。私はそれが働いているかどうかわからない。あなたが見たい場合はreferenceです。
関連する問題