为蹩脚的头衔道歉,但我找不到更好的东西。
所以这是我的问题:我使用iron-ajax获取数据,我在dom-repeat中绑定“on-response”并得到一个表。细
但是我也想在我的javascript部分中访问ajax-response作为变量,所以我可以使用诸如.length之类的方法在例如“for”循环中使用。
这是我到目前为止所尝试的内容,通过阅读此论坛上的其他帖子,但不起作用:
<iron-ajax id="videosAjax" auto
url="http://mysuperawesome/service"
params='{}'
handle-as="json"
last-response="{{ajaxResponse}}"></iron-ajax>
<template is="dom-repeat" items="{{videosList}}">
<div class="colM">[[item.id]]</div>
</template>
和脚本部分:
<script>
Polymer({
is: 'videos',
ajaxResponse: function (data) {
this.videosList = data.detail.response;
console.log(this.videosList);
},
...
this.async(function () {
var count = this.videosList.length;
document.getElementById("videosCount").innerText = count;
</script>
但不,console.log仍然返回“undefined”:(
答案 0 :(得分:2)
您的示例有last-response="{{ajaxResponse}}"
,它将响应绑定到名为ajaxResponse
的属性,这将允许模板中的其他元素绑定到它(jsbin)。
由于您要通知回调,因此您应使用on-response="METHOD"
,其中,METHOD
是Polymer对象上方法的名称。实际上,该方法看起来与您的示例目前与ajaxResponse()
非常相似。
这是一个工作演示(基于iron-ajax/demo/index.html
):
<!DOCTYPE html>
<html>
<head>
<base href="https://polygit.org/polymer+:master/components/">
<script src="webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="polymer/polymer.html">
<link rel="import" href="iron-ajax/iron-ajax.html">
</head>
<body>
<x-foo></x-foo>
<dom-module id="x-foo">
<template>
<iron-ajax auto url="https://www.googleapis.com/youtube/v3/search"
params='{"part":"snippet", "q":"polymer", "key": "AIzaSyAuecFZ9xJXbGDkQYWBmYrtzOGJD-iDIgI", "type": "video"}'
handle-as="json"
on-response="handleResponse"
debounce-duration="300"></iron-ajax>
</template>
<script>
Polymer({
is: 'x-foo',
handleResponse: function(e) {
console.log(e.detail.response);
}
});
</script>
</dom-module>
</body>
</html>
答案 1 :(得分:0)
正如documentation所说
lastResponse对象
lastRequest的回复。
请注意,lastRequest时设置lastResponse和lastError 完成,所以如果加载为true,则lastResponse和lastError将 对应于上一个请求的结果。
响应的类型由handleAs的值决定 请求生成的时间。
因此,在您的代码中,我认为ajaxResponse
应该是一个对象,而不是一个函数。
properties:{
ajaxResponse:{
type:Object,
value: function(){return {};}
}
},
该对象将包含您的ajax响应。