У меня есть компонент, который использует экземпляр <iron-ajax>
для извлечения данных из back-end, и я хотел бы использовать <iron-request>
для отправки обновлений, таких как запросы POST/DELETE.
Все работает отлично в первый раз. Однако, если запрос снова вызван, я получаю сообщение об ошибке:
Uncaught TypeError: Невозможно прочитать свойство 'then' из undefined
Мое определение шаблона выглядит так:
...
<iron-ajax id="ajax" auto verbose
url="/cart-api/"
last-response="{{ajaxResponse}}"
handle-as="json">
</iron-ajax>
<iron-request id="xhr"></iron-request>
...
В моем компоненте script я использую метод send()
<iron-request>
для отправки 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.
Итак, мой вопрос заключается в следующем: является ли элемент <iron-request>
действительно многоразовым? Нужно ли мне что-либо делать, чтобы обновить или повторно инициализировать его?
UPDATE
Благодаря @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();
},