Iron Ajax - 如何从响应函数访问响应?

时间:2016-11-28 17:24:20

标签: polymer

我有这个元素:

<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 div的resultado,但无效。

我试过了:

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

e.detail.response is null

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

Response in network tab

1 个答案:

答案 0 :(得分:17)

响应数据实际上是在<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带有对象(通过iron-request属性包含request,通过error)的潜在错误作为事件详细信息。