2016-11-28 22 views
3

我有这样的元素:Iron Ajax - 如何访问on-response函数的响应?

<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功能,以将其设置为resultado股利innerHTML,但没有任何工作。

我曾尝试:

如果我调试并在响应函数时观看e.detail.response值:

e.detail.response is null

在网络标签我可以看到响应(简单的“你好”):

Response in network tab

回答

10

实际上在<iron-ajax>.response事件的event.detail.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对象(通过request属性包含iron-request,并且经由error底层误差)作为事件的细节。

+0

e.detail.response对我而言为空。我编辑了我的文章并上传了一些检查截图 – Jaime

+0

@Jaime问题是你已经配置了''来期待JSON,但你的服务正在发送纯文本或HTML。查看更新的答案。 – tony19

+0

太棒了!就是这样。我已经更改为“文本”,现在它的工作原理! 谢谢! – Jaime