2016-11-28 2 views
3

У меня есть этот элемент:Iron Ajax - Как получить доступ к ответу от функции ответа?

<template> 
... 
<iron-ajax 
    id="ajax" 
    url="..." 
    handle-as="json" 
    verbose=true 
    last-response={{ajaxResponse}} 
    loading="{{cargando}}" 
    on-response="_handleResponse"> 
</iron-ajax> 

<div id="resultado"></div> 
</template> 

<script> 
    Polymer({ 
     ... 

     _handleResponse: function(event){ 
      console.log("_handleResponse... "); 
      // this.$.resultado.innerHTML = event.detail.innerHTML; 
     } 
    }); 
</script> 

Ответ я вижу в Firebug является:

<p>Hello word</p> 

Я хочу, чтобы получить доступ ответ в _handleResponse функции для того, чтобы установить его в качестве innerHTML из resultado DIV, но ничего не работает.

Я попытался:

Если я отладки и смотреть значение e.detail.response когда на-ответ функции:

e.detail.response is null

В закладке сети можно увидеть ответ (просто 'привет'):

Response in network tab

ответ

10

Данные ответа фактически возвращены в event.detail.response события <iron-ajax>.response. Ваше поле response - null, потому что вы неправильно сконфигурировали <iron-ajax>.handleAs. Когда вы установите его на json, заголовок Accept-Type установлен в application/json, и любой ответ будет обрабатываться JSON.parse(). Если ваш сервер игнорирует Accept-Type и отправляет все, что захочет, <iron-request> попытается проанализировать ответ как JSON и сбой, вызывая null response body за spec. Обратите внимание, что hello и <p>Hello</p> недействительны строки JSON.

Если вы хотите получить данные открытого текста, установите <iron-ajax>.handleAs в text (по умолчанию json).

Demo of <iron-ajax handle-as="text">

Demo of <iron-ajax handle-as="json">


question you linked спрашивает о событии <iron-ajax>.error, которое имеет различную деталь события, чем событие <iron-ajax>.response.

Когда <iron-ajax> получает ответ сервера, он fires the response event с соответствующим <iron-request> в качестве деталя события.

Если запрос не выполняется по какой-либо причине, <iron-ajax>fires the error event с объекта (содержащего iron-request с помощью атрибута request, и основной ошибки через error) в качестве детали событий.

+0

e.detail.response - null для меня. Я отредактировал свой пост и загрузил некоторые контрольные скриншоты – Jaime

+0

@Jaime Проблема в том, что вы настроили '' ожидать JSON, но ваша служба отправляет открытый текст или HTML. См. Обновленный ответ. – tony19

+0

Отлично! Вот и все. Я изменился на «текст», и теперь он работает! Спасибо! – Jaime