[英]Can't compute the Polymer iron-ajax headers property before request is done
在以編程方式將用戶標記添加到iron-ajax元素的headers屬性后,我嘗試生成Iron-Ajax請求。 問題是控制台給我一個401(未經授權)。 但是,我確信令牌是正確的,問題必須是我實現它的方式。
出於測試目的,我在從鐵存儲器中檢索它后記錄該令牌,並記錄我的計算功能應該綁定到iron-ajax的headers屬性的返回。 我在控制台中返回的所有結果都是正確的。 此外,當我在iron-ajax的標題內硬編碼令牌時,整個過程都有效。 這就是為什么我確信問題來自其他地方。 我現在在計算headers屬性后創建請求,而不是在iron-ajax上設置auto,因為我認為問題可能是在請求完成后可能會執行compute函數。 但是我無法讓它發揮作用。
我希望有人可以指出我的錯誤方向。
<dom-module id="my-newsfeed-view">
<template>
<iron-ajax
id="requestNews"
url="http://api.mjp.dev/v1/news/"
handle-as="json"
headers='{{header}}'
loading="{{isloading}}"
last-response="{{response}}"></iron-ajax>
</template>
<script>
Polymer({
is: 'my-newsfeed-view',
properties: {
user: {
type: String,
},
header: {
computed: 'computeHeader(user)'
},
},
ready: function() {
// Get User key from the Storage
this.$.localstorage.reload();
// console.log('This token is:' + this.user.token);
this.computeHeader();
// console.log('{"Authorization": "Bearer ' + this.user.token + '"}');
this.$.requestNews.generateRequest();
},
computeHeader: function(user) {
return '{"Authorization": "Bearer ' + this.user.token + '"}';
},
});
</script>
</dom-module>
第一個問題是computeHeader()
在返回一個Object
時返回一個string
。 <iron-ajax>
將自動反序列化Object
,並將其合並到請求標頭中。 它應該如下所示:
computeHeader: function(user) {
return {Authorization: 'Bearer ' + user.token};
}
您也不需要在ready()
調用computeHeader()
ready()
。
第二個問題是this.user
是一個string
,它被傳遞給computeHeader(user)
,它假定其user
參數是一個包含token
的對象。 目前還不清楚如何在代碼中設置user
,但您可以考慮添加一個可以替換computeHeader(token)
user
的token
屬性。
演示:
HTMLImports.whenReady(() => { "use strict"; Polymer({ is: 'x-foo', properties: { headers: { computed: '_computeHeader(token)' }, token: { type: String, value: '1234' } }, _computeHeader: function(token) { return {Authorization: 'Bearer ' + token}; }, _onResponse: function(e) { console.log('response', e.detail.response); } }); });
<head> <base href="https://polygit.org/polymer+1.7.0/components/"> <script src="webcomponentsjs/webcomponents-lite.min.js"></script> <link rel="import" href="polymer/polymer.html"> <link rel="import" href="iron-ajax/iron-ajax.html"> </head> <body> <x-foo></x-foo> <dom-module id="x-foo"> <template> <iron-ajax auto headers="[[headers]]" url="https://httpbin.org/get" on-response="_onResponse"></iron-ajax> </template> </dom-module> </body>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.