Polymer 3.0 iron-ajax возвращает нулевой ответ

Я много раз использовал Polymer 1 и 2 на профессиональном уровне, но до сегодняшнего дня не пробовал Polymer 3.0. Я пробую тестовый ответ, но я просто не могу заставить его работать.

Вот мой компонент iron-ajax:

<iron-ajax id="requestData" url="/src/witches-brew-app/requests.json" handle-as="json" 
    last-response="{{requests}}"
    on-response="_requestResponse"
    on-error="_requestError">
</iron-ajax>

У меня есть кнопка, которая вызывает функцию generateRequest для iron-jax, и, как вы видите, функция, которая вызывается при получении ответа.

_requestResponse(e){
    console.info(e);
    console.info(this.requests);
 }

_getRequests(){
    console.info("_getRequests")
    this.$.requestData.generateRequest().then(function (e) {
        console.info("_getRequests PROMISE")
        console.info(this.requests);
    }.bind(this));
}

Обещание, кажется, никогда не возвращается, но на вкладке сети отображаются все мои данные в Google Chrome!

вкладка "Сеть"

Функция _requestResponse запускается, однако она также выводит свойство requests как нулевое.

Любая идея, что может быть причиной этого? Я не могу понять это для жизни меня. Я также пробовал это с автоматическим флагом, и у меня точно такая же проблема.


person Llewelyn Griffiths    schedule 17.12.2018    source источник
comment
Честно говоря, просто перестаньте использовать iron-ajax, и эта проблема будет решена очень быстро. Лучше использовать API-интерфейс fetch, который изначально предоставляется всеми браузерами и является преемником ajax. developer.mozilla.org/en-US/docs/Web/API/ Fetch_API   -  person Pascal L.    schedule 18.12.2018


Ответы (1)


Скорее всего, вы получили данные на объекте requests. Но в приведенном выше коде вы получили null из-за времени получения данных. Итак, если вы наблюдаете свойство примерно так, как показано ниже, вы можете увидеть данные, которые вы получили iron-ajax :

здесь рабочий пример iron-ajax DEMO

static get properties() { return { 
    requests: { 
       type: Object,
       observer:'_requestResponse'  }
}

_requestResponse(e){
    if (e) {
       console.info(e);
       console.info(this.requests);
    }
}
  • Конечно, вам нужно будет удалить on-response="_requestResponse"

РЕДАКТИРОВАТЬ:

static get observers() { return ['_requestResponse(requests)'] }
person HakanC    schedule 17.12.2018
comment
Я попытался добавить наблюдателя, к сожалению, это не сработало. Тем не менее, я посмотрел на вашу демонстрацию, используя тот же URL, и это сработало. Кажется, это проблема с запросом локальных файлов json с использованием iron-ajax. - person Llewelyn Griffiths; 17.12.2018
comment
Наблюдатель должен работать, или попробуйте вариант наблюдателей, как я отредактирую выше. Кроме того, проверьте имя пути, поскольку я думаю, что это, скорее всего, неправильное определение. Подскажите, пожалуйста, где находится файл (железный ajax называется) - person HakanC; 17.12.2018
comment
Мне удалось заставить его работать сейчас! Интересно, что после отмены моего прогресса и сделанных вами предложений я не могу сломать его снова. Я переключился с использования терминала Cygwin64 на командную строку Windows для обслуживания, но теперь он работает с обоими. Не смотря ни на что большое спасибо! - person Llewelyn Griffiths; 17.12.2018