2016-07-22 4 views
0

だから私はアウレリアドキュメント以下、このポストの要求をしようとしています: http://aurelia.io/hub.html#/doc/article/aurelia/fetch-client/latest/http-services/3Aurelia | jsonはキャッチ可能な例外を解析しますか?

そして、これが要求です:

safetyParseJSONがある
httpClient.configure(config => { 
     config 
      .withBaseUrl(baseUrl) 
    }); 
this.client = httpClient; 
this.client.fetch(`/api/Register/${userName}`, { 
      method: "post", 
      body: json(loginInformation), 
      headers: { 
       'Access-Control-Allow-Origin' : '*', 
       'Accept': 'application/json' 
      } 
     }) .then(response => this.safelyParseJSON(response)) 
      .then(data => this.setup(data)); 

safelyParseJSON(response) { 
     var parsed 
      try { 
       parsed = response.json(); 
      } catch (e) { 
      } 

     return parsed 
    } 

が、私は受信し続けますこのエラー:

"uncaught (in promise) SyntaxError: Unexpected end of JSON input"

誰か何が間違っているのか分かりませんか?

注:サーバーから404/500を受信した場合にのみこのエラーが発生します。結果が正常であれば、このエラーは発生します。

注2:try-catch内でこの関数をラップしていますが、これはまだ機能しません。例外をキャッチしません。

注3:

parsed = JSON.parse(response); 

しかし、応答は常に定義されていませんより:この行で

parsed = response.json(); 

:私はこの行を交換しようとしています。

+0

返されるjsonの外観はどうなっていますか?開発ツールのネットワークタブを確認してください。 –

答えて

1

私は小さな変更で、ジェレミーDanyowの答えを使用して終了:

.then(response => { 
if (response.ok && response.status === 200) { 
    return response.json().then(data => this.setup(data)); 
} 
return Promise.reject(response.text()); 
}); 

をのResponse.Statusチェックを追加することは、私に必要でしたレスポンスコードとしての大文字と小文字は、ステータスコード204(内容なし)でも真です。

+0

私は個人的には204レスポンスステータスでエラーを投げません。これは通常DELETEメソッドであり、悪いレスポンスではなく、情報を含まない良いものです。 – Randy

2

.json()を呼び出しに対する応答のステータスを確認します

.then(response => { 
    if (response.ok) { 
    return response.json().then(data => this.setup(data)); 
    } 
    return Promise.reject(response.text()); 
}); 
関連する問題