我有这个元素:
<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
,但无效。
我试过了:
event.detail.innerHTML
event.detail.response
event.detail.xhr.response
event.detail.xhr.responseText
event.detail.request.xhr.response
(此路线不存在。Polymer Iron Ajax - How to access Response from Request after Error Event?中的解决方案怎么样?)如果我在响应函数中调试并观察e.detail.response值:
在网络标签中,我可以看到响应(简单的'你好'):
答案 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">
event.detail.request.xhr.response
(此路线不存在。Polymer Iron Ajax - How to access Response from Request after Error Event?中的解决方案怎么样?)
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
)的潜在错误作为事件详细信息。