【问题标题】:Iron Ajax - How to access Response from on-response function?Iron Ajax - 如何从响应功能访问响应?
【发布时间】:2017-04-12 12:23:31
【问题描述】:

我有这个元素:

<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 div 的innerHTML,但没有任何效果。

我试过了:

如果我在 on-response 功能中调试并观察 e.detail.response 值:

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

【问题讨论】:

    标签: polymer


    【解决方案1】:

    响应数据实际上是在&lt;iron-ajax&gt;.response 事件的event.detail.response 中返回的。你的response 字段是null,因为你错误地配置了&lt;iron-ajax&gt;.handleAs。当您将其设置为json 时,Accept-Type 标头将设置为application/json,并且任何响应都将使用JSON.parse() 进行解析。如果您的服务器忽略 Accept-Type 并发送它想要的任何内容,&lt;iron-request&gt; 将尝试将响应解析为 JSON 并失败,从而根据 spec 导致 null response body。请注意,hello&lt;p&gt;Hello&lt;/p&gt; 不是有效的 JSON 字符串。

    如果要接收明文数据,请将&lt;iron-ajax&gt;.handleAs设置为text(默认为json)。

    Demo of &lt;iron-ajax handle-as="text"&gt;

    Demo of &lt;iron-ajax handle-as="json"&gt;


    question you linked 询问&lt;iron-ajax&gt;.error 事件,它的事件详细信息与&lt;iron-ajax&gt;.response 事件不同。

    &lt;iron-ajax&gt; 收到服务器响应时,它fires the response event 将对应的&lt;iron-request&gt; 作为事件详细信息。

    如果请求因任何原因失败,&lt;iron-ajax&gt;fires the error event 带有一个 object(通过 request 属性包含 iron-request,通过 error 包含基础错误)为活动详情。

    【讨论】:

    • e.detail.response 对我来说是空的。我已经编辑了我的帖子并上传了一些检查截图
    • @Jaime 问题是您已将 &lt;iron-ajax&gt; 配置为期望 JSON,但您的服务正在发送纯文本或 HTML。查看更新的答案。
    • 太棒了!就是这样。我已更改为“文本”,现在可以使用了!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多