从HTTP Post Response Angular5中获取值



我从帖子中获得了此JSON响应:

{access_token: "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6IC…GYRp73xtCuCE2VtNZqSC7C4N_sDsJoYt_9iaSgLDmpMv70cQw", expires_in: 300, refresh_expires_in: 1800, refresh_token: "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6IC…t-wfBBjgDoitwpiCZVykqZCT2mJvwdRmt1f8OlP7guqDLlJyg", token_type: "bearer", …}
access_token
:
"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJidFFTaGZBUDBpazVTTEFTOWZMRE4tbWxXZ3dvRnYwODVPZHpjSUJrWC13In0.eyJqdGkiOiIyODQ1ZWEwOC1kZDc5LTRiYjQtYTY2Ny03MDc3OTlkODVkMGEiLCJleHAiOjE1MTk1ODY2MDAsIm5iZiI6MCwiaWF0IjoxNTE5NTg2MzAwLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvZGVtbyIsImF1ZCI6ImFkbWluLWNsaSIsInN1YiI6IjNkYTY2MDYxLTQ2ZjUtNDZmYi1hNjllLTgwNGEzODkyMWQzMiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImFkbWluLWNsaSIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjliODFkNWZjLTJkMjAtNDMzNS04MjViLWY3MTA5Mzc0MGVlNyIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOltdLCJyZXNvdXJjZV9hY2Nlc3MiOnt9LCJuYW1lIjoiUGllcnJlIENvbGFydCIsInByZWZlcnJlZF91c2VybmFtZSI6InBpZXJyZWNvbGFydCIsImdpdmVuX25hbWUiOiJQaWVycmUiLCJmYW1pbHlfbmFtZSI6IkNvbGFydCIsImVtYWlsIjoic2NhZHJhLTA4QGhvdG1haWwuY29tIn0.VceGd7ot7tWQfQ8uScegjcYz1gzOrdEE1som3-PMuyNumV_5qDn44omX3m64NGb5NgT7zgxX1QmeZyKH5i6AG9lG0lvM-u_8zp7tB4kd6i5oNSVQqiBSQmNK7k_Bk5DCIr72epI11W15ZbMYr2siumsTuO5qHkOApIarrgl9B0Cl_sTRMkIhO7S-CltmwkpynNHUEbafPC9bAKx83E4ADOlnlbZSIJnvvVr8aRQ_kAujTlRqRAEXweDkqPS05EFrOGifjKfKLZle3KdK31V0uT-gy2dZyjqflekKkGYRp73xtCuCE2VtNZqSC7C4N_sDsJoYt_9iaSgLDmpMv70cQw"
expires_in
:
300
not-before-policy
:
0
refresh_expires_in
:
1800
refresh_token
:
"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJidFFTaGZBUDBpazVTTEFTOWZMRE4tbWxXZ3dvRnYwODVPZHpjSUJrWC13In0.eyJqdGkiOiIwOGUyNjc3ZC02YzNjLTQ5NGUtOGY4OC04MjBjNDk1M2Q5NjQiLCJleHAiOjE1MTk1ODgxMDAsIm5iZiI6MCwiaWF0IjoxNTE5NTg2MzAwLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvZGVtbyIsImF1ZCI6ImFkbWluLWNsaSIsInN1YiI6IjNkYTY2MDYxLTQ2ZjUtNDZmYi1hNjllLTgwNGEzODkyMWQzMiIsInR5cCI6IlJlZnJlc2giLCJhenAiOiJhZG1pbi1jbGkiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiI5YjgxZDVmYy0yZDIwLTQzMzUtODI1Yi1mNzEwOTM3NDBlZTciLCJyZXNvdXJjZV9hY2Nlc3MiOnt9fQ.JG51P9Dxv84jy4LZXuQau9kGS-YoXEfp1gc3CCqUDtM0uupoXN3-zGcrxFQ_0vHrqX4XHqI43aQWAmZtbznXtBOAPoVDkHXsZKnZxYLEag1b9y7aGHMr_psk6T5ckxiij1ge96XGIyn4mRyJgVUv28SOM1IcLb65HskvCmiI23NqE8kwtfKTvYv9DYYqD_eIV7lm4ePTeJiz2v70DEdK_dETR0eBSszabkurLZfjS-tAxC9buL7HE2ZdCATPCMj3mUxjllG329u1JRaEjJjX3nyyPJY_POUaKfkBnt-wfBBjgDoitwpiCZVykqZCT2mJvwdRmt1f8OlP7guqDLlJyg"
session_state
:
"9b81d5fc-2d20-4335-825b-f71093740ee7"
token_type
:
"bearer"

我需要获取access_token的值,但是当我这样做时,值为null:

this.http
.post(
    this.ROOT_URL,
    data.toString(), 
    {headers: new HttpHeaders().set('content-type', 'application/x-www-form-urlencoded')}
)
//.map(res => res.json())
.subscribe(data => console.log(data))
console.log(data.get('access_token'))
}

尝试此订阅方法 let accessToken = data['access_token']

代码是异步的。data仅在传递的函数中以参数为 .subscribe()进行更新。

更改此内容:

this.http
  .post(
    this.ROOT_URL,
    data.toString(), 
    {headers: new HttpHeaders().set('content-type', 'application/x-www-form-urlencoded')}
  )
  //.map(res => res.json())
  .subscribe(data => console.log(data))
  console.log(data.get('access_token'))

进入这个:

this.http
  .post(
    this.ROOT_URL,
    data.toString(), 
    {headers: new HttpHeaders().set('content-type', 'application/x-www-form-urlencoded')}
  )
  //.map(res => res.json())
  .subscribe(data => {                          // <== changed this line
    console.log(data);                          // <== changed this line
    console.log(data.get('access_token'));      // <== changed this line
  })
}

不是console.log(data.get('access_token'))代码仅在data后才执行

跟进。您应该稍微学习一些异步代码,因此您不再收到这些错误了。我建议MDN的承诺页面作为起点。

您的代码中有2个错误

  1. data.get不是一个函数,因为您的ajax调用的返回是普通对象。它应该是data.access_token或data ['access_token']

  2. 您的控制台。将其删除在订阅块之外,因此数据无论如何都是无效的。控制台日志必须在订阅回调

尝试

this.http
.post(
    this.ROOT_URL,
    data.toString(), 
    {headers: new HttpHeaders().set('content-type', 'application/x-www-form-urlencoded')}
)
.subscribe(data => 
{
    console.log(data))
    console.log(data.access_token)
});

最新更新