将iron-ajax响应作为javascript变量

时间:2016-05-20 14:33:56

标签: javascript ajax polymer response

为蹩脚的头衔道歉,但我找不到更好的东西。

所以这是我的问题:我使用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”:(

2 个答案:

答案 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>

jsbin

答案 1 :(得分:0)

正如documentation所说

  

lastResponse对象

     

lastRequest的回复。

     

请注意,lastRequest时设置lastResponse和lastError   完成,所以如果加载为true,则lastResponse和lastError将   对应于上一个请求的结果。

     

响应的类型由handleAs的值决定   请求生成的时间。

因此,在您的代码中,我认为ajaxResponse应该是一个对象,而不是一个函数。

properties:{
    ajaxResponse:{
        type:Object,
        value: function(){return {};}
    }
},

该对象将包含您的ajax响应。