【问题标题】:Polymer 1.0: Multiple calls to send() method of iron-requestPolymer 1.0:多次调用 Iron-request 的 send() 方法
【发布时间】:2015-08-16 16:05:36
【问题描述】:

我有一个组件使用<iron-ajax> 的实例从后端检索数据,我想使用<iron-request> 发送更新,例如P​​OST/DELETE 请求。

一切都在第一次完美运行。但是,如果再次调用该请求,则会出现错误:

未捕获的类型错误:无法读取未定义的属性“then”

我的模板定义如下所示:

...
<iron-ajax id="ajax" auto verbose
    url="/cart-api/"
    last-response="{{ajaxResponse}}"
    handle-as="json">
</iron-ajax>

<iron-request id="xhr"></iron-request>
...

在我的组件脚本中,我使用&lt;iron-request&gt; 的send() 方法发送一个POST:

var me = this;
this.$.xhr.send({
    url: "/cart-api",
    method: "POST",
    body: JSON.stringify(entry)
}).then(function() {
    me._refresh();
}, function() {
    console.error("POST failed");
});

错误消息表明 send 已返回 undefined 而不是有效的 Promise 对象。

所以我的问题是:&lt;iron-request&gt; 元素实际上是可重用的吗?我需要做任何事情来刷新或重新初始化它吗?

更新

感谢@Zikes,我已将我的代码更新如下:

<iron-ajax id="ajaxGet" auto
    url="/cart-api/"
    last-response="{{ajaxResponse}}"
    handle-as="json">
</iron-ajax>

<iron-ajax id="ajaxPost" url="/cart-api" method="POST" on-response="_refresh"></iron-ajax>

<iron-ajax id="ajaxDelete" method="DELETE" on-response="_refresh"></iron-ajax>
insertEntry: function(entry) {
    this.$.ajaxPost.body = JSON.stringify(entry);
    this.$.ajaxPost.generateRequest();
},

_handleRemove: function(e) {
    var entry = e.currentTarget.entry;
    this.$.ajaxDelete.url = "/cart-api/" + entry.id;
    this.$.ajaxDelete.generateRequest();
},

_refresh: function() {
    this.$.ajaxGet.generateRequest();
},

【问题讨论】:

    标签: javascript ajax polymer polymer-1.0


    【解决方案1】:

    &lt;iron-ajax&gt; 组件为每个新的请求生成一个新的&lt;iron-request&gt;:https://github.com/PolymerElements/iron-ajax/blob/master/iron-ajax.html#L442

    如果您正在寻找可重用性(以及其他不错的功能,如去抖动),您最好使用&lt;iron-ajax&gt; 组件。

    【讨论】:

    • 谢谢,但是 Iron-ajax 可以用于非 GET 请求吗?
    • 是的!它有一个method 参数:github.com/PolymerElements/iron-ajax/blob/master/…
    • 只需关闭auto,否则它会在单个参数更改时立即触发请求(除非它处于去抖动的中间)。更改多个参数可能会导致多个不完整的请求。
    • 再次感谢。对于删除,我需要更改 URL 以附加要删除的项目的 ID。从我的脚本中设置元素的 URL 属性然后调用 generateRequest 的正确模式是什么?
    • 完成属性更改后,调用this.$.ajax.generateRequest() 发送请求并返回为该请求生成的&lt;iron-request&gt; 组件。
    猜你喜欢
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多