2017-06-22 4 views
0

springmvcとangularjsを使用してデータを読み込み、ウェブページに表示しています。 URLからデータを読み取るために私はJSoup APIを使用しています。スプリングコントローラから文字列を返してウェブページに表示することができません

URLから読み取ったコンテンツをWebページに表示しながらエラーが発生しました。何かアドバイスが参考になります。

コード:

HTML:

<div ng-controller="readContentController"> 
           <div> 
            {{content}} 
           </div> 
          </div> 

JSコード:

//controller 

myApp.controller('readContentController', function ($rootScope, $scope, $sce, ReportService, $window) { 
    $scope.content = {}; 
    MyService.getDataFromURL().then(
     function (response) { 
      console.log("response :" + response); 
      $scope.content = response; 
      }, 
     function (errResponse) { 
      $rootScope.showError("error :" + errResponse); 
     }); 
}); 
//service call 
myServiceFactory.getDataFromURL = function(){ 
     var deferred = $q.defer(); 

     $http.get('/getHTMLDataFromURL') 
      .then(
       function (response) { 
        deferred.resolve(response.data); 
       }, 
       function(errResponse){ 
        console.error('Error while fetching data' + errResponse); 
        deferred.reject(errResponse); 
       } 
      ); 
     return deferred.promise; 
    } 

スプリングコントローラ:

@RequestMapping(value = "/getHTMLDataFromURL", method = RequestMethod.GET) 
    public 
    @ResponseBody String getHtmlStrigContent() throws Exception { 
     Document doc = Jsoup.connect("https://xyz.abc.com/myFile.pdf").get(); 
     String htmlString = doc.toString(); 
     System.out.println("asD" + htmlString); 
     return htmlString; 
} 

エラーメッセージ:

SyntaxError: Unexpected token < in JSON at position 0 
    at JSON.parse (<anonymous>) 
    at Ec (angular.min.js:16) 
    at ic (angular.min.js:93) 
    at angular.min.js:93 
    at q (angular.min.js:7) 
    at od (angular.min.js:93) 
    at f (angular.min.js:95) 
    at angular.min.js:132 
    at m.$eval (angular.min.js:146) 
    at m.$digest (angular.min.js:143) 
(anonymous) @ angular.min.js:119 
myService.js:158 Error while fetching dataSyntaxError: Unexpected token < in JSON at position 0 

他のWebページからコンテンツを読み込み、アプリケーションWebページに表示しようとしています。

答えて

0

Angularのように、レスポンスはHTMLではなくJSONである必要があります。 @RequestMappingアノテーションにproduces="text/plain"またはproduces="text/html"を追加してみてください。

しかし、別の問題もあります。既定では、明らかなセキュリティ上の問題により、Angularは変数の内容をHTMLとして表示しません。この方法で使用する前に、コンテンツを信頼することをAngularに明示的に伝える必要があります。これを行う方法の例についてはSee the documentation for $sceを参照してください。

+0

これは動作していますが、htmlの出力を表示したいのですが、私はURLからhtmlコンテンツを読んでいます。ブラウザで開くと、Webページ(URLに当たったときに表示される同じページ) 。現在はStringとして表示されていますが、htmlの文字列表現ではなくWebページとして応答を表示できます。助言があれば助かります。 – sss

+0

@sss:私の第2段落を見てください。 :) –

+0

入力のおかげで@アルヴィントンプソン。それは働いた。 – sss

0

これはjsがJSON形式のHTML応答を解析しようとしているようです。 AngularJS $ HTTP Documentation

から

すべての要求に対するデフォルトのヘッダ、

$httpProvider.defaults.headers.common (headers that are common for all requests): 
Accept: application/json, text/plain, */* 

デフォルトの変換は、あなたがのContent-Typeを持つデフォルトを上書きすることができます

If the data property of the request configuration object contains an object, serialize it into JSON format. 

ですあなたの要求にヘッダーが設定されています。

var req = { 
method: 'GET', 
url: '/getHTMLDataFromURL', 
headers: { 
    'Content-Type': 'text/plain', 
    'Accept': 'text/plain' 
} 
} 

$http(req).then(function(){...}, function(){...}); 
+0

レスポンスを削除したときに同じエラーが表示され、レスポンスで試行しました – sss

+0

私のレスポンスを編集するには、AngularJS $ httpのドキュメントで、Content Typeのデフォルトヘッダーは次のとおりです。$ httpProvider.defaults.headers.common 受け入れ:application/json、text/plain、*/*、テキストのみを受け入れるように変更する必要があります。 – abstractnature

+0

ありがとうございます、ウェブページ上に文字列として表示されます。返されたレスポンスをウェブページとして表示するにはどうすればいいですか(レスポンスはHTMLコンテンツです)。角度は、完全なjqueryの実装を持っていない、と私は '追記しないと思います:$(「.inner」).append(「ハロー」、jqueryの – sss

関連する問題