簡體   English   中英

在請求完成之前無法計算Polymer iron-ajax headers屬性

[英]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) usertoken屬性。

演示:

 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> 

codepen

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM