聚合物铁-ajax POST方法不起作用

时间:2017-06-05 17:55:19

标签: polymer polymer-2.x iron-ajax

我正在学习聚合物。我无法使用<iron-ajax>计算代码“发布”。我正在使用在线测试API(https://reqres.in/),我应该收到状态代码为200的回复:

{"token": "QpwL5tke4Pnpja7X"}".

我找不到显示POST示例的教程。我一直在线搜索过去24小时,但所有内容都是GET而不是POST

如果熟悉<iron-ajax>的人可以查看我的代码并帮助我开始工作或弄清楚如何编写正确的代码,那对像我这样的初学者来说非常有用。

  1. 我的代码是否与body属性相符?
  2. 响应是200状态代码还是令牌?

    <!--
    @license
    Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
    This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
    The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
    The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
    Code distributed by Google as part of the polymer project is also
    subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
    -->
    
    <link rel="import" href="../bower_components/polymer/polymer-element.html">
    <link rel="import" href="shared-styles.html">
    <link rel="import" href="../bower_components/polymer/polymer.html">
    <link rel="import" href="../bower_components/iron-ajax/iron-ajax.html">
    
    <dom-module id="my-view2">
      <!--test using this data: {
          "email": "peter@klaven",
          "password": "cityslicka"
      }-->
      <template>
        <iron-ajax>
            auto 
            method="post"
            url="https://reqres.in/api/login"
            handle-as="json"
            content-type="application/json"
            body =[{"email": "peter@klaven", "password": "cityslicka"}]
            on-response={{handleResponse}}
    
        </iron-ajax>
    
        <!--Handle response-->
        <p> response handling code goes here, how to show the response from the server here?</p>
        <p> It should show: {"token": "QpwL5tke4Pnpja7X"} </p>
        <div>
        <p> {{handleResponse}} </p>
        </div>
      </template>
    
      <script>
        class MyView2 extends Polymer.Element {
          static get is() { return 'my-view2'}; 
    
          static get proporties() {
            return {
              handleResponse: {
                type: Object,
                notify: true,
                readOnly: true 
              }
            };
          }
        }
    
        window.customElements.define(MyView2.is, MyView2);
      </script>
    </dom-module>
    

1 个答案:

答案 0 :(得分:2)

  • 您的HTML格式错误(可能是复制粘贴错误?)。 iron-ajax的属性应该在开始标记内,如下所示:

    <iron-ajax
      auto
      method="post"
      ...
    >
    </iron-ajax>
    
  • 您可能想将handleResponse属性绑定到<iron-ajax>.lastResponse,其中包含对AJAX请求的响应。

    <iron-ajax last-response={{handleResponse}} ...>
    

    请注意<p>{{handleResponse}}</p>的绑定会将响应对象呈现为[object Object]。如果您想查看回复内容,则必须使用返回字符串的computed binding(例如,使用JSON.stringify()),如下所示:

    // <template>
    <p>json(handleResponse)</p>
    
    // <script>
    class XFoo extends Polymer.Element {
      ...
      json(obj) {
        return JSON.stringify(obj);
      }
    }
    
  • <iron-ajax>.body的属性值应该是单引号:

    <iron-ajax body='[{"foo": "bar"}]'>
    

完整示例应如下所示:

<dom-module id="x-foo">
  <template>
    <iron-ajax
              auto
              method="post"
              url="//httpbin.org/post"
              body='[{"foo": "{{foo}}"}]'
              handle-as="json"
              content-type="application/json"
              last-response="{{lastResponse}}"
              >
    </iron-ajax>
    <pre>[[json(lastResponse)]]</pre>
  </template>
  <script>
    class XFoo extends Polymer.Element {
      static get is() { return 'x-foo'; }

      static get properties() {
        return {
          foo: {
            type: String,
            value: 'bar'
          }
        }
      }

      json(obj) {
        return JSON.stringify(obj, null, 2);
      }
    }
    customElements.define(XFoo.is, XFoo);
  </script>
</dom-module>

demo