2015-12-08 48 views
14

我有一个聚合物铁ajax元素的问题。 当调用它像这样:带数据绑定的聚合物铁 - 阿贾克斯元素参数将参数分成单个字符

<iron-ajax url="https://api.onedrive.com/v1.0/drive/root" params='{"access_token":"[[access_token]]"}'></iron-ajax> 

它发出这样的网址,整个PARAMS字符串分割成多个参数:

https://api.onedrive.com/v1.0/drive/root?0="&1=a&2=c&3=c&4=e&5=s&6=s&7=_&8=t&9=o&10=k&11=e&12=n&13="... 

当使用普通的字符串作为参数,它能够正常工作,所以我猜报价是正确的。

元素的脚本的一部分,它使用的铁AJAX:

<script> 

    Polymer({ 
    is: 'onedrive-files', 
    properties: { 
    access_token: String 
    }, 

    ready: function() { 
    }, 
}); 
</script> 

和我打电话这样的元素:

<onedrive-files access_token="testtoken"> 
</onedrive-files> 

有没有人有什么想法? 谢谢!

编辑: 随着吸气功能:

<dom-module id="onedrive-files"> 
     <template> 
    <iron-ajax id="ajax" url="https://api.onedrive.com/v1.0/drive/root" last-response="{{data}}" params='{{_getParams()}}' auto></iron-ajax> 
    </template> 
    <script> 
    Polymer({ 
     is: 'onedrive-files', 
     properties: { 
     access_token: String 
     }, 

     _getParams: function() 
     { 
     return ('{"access_token":"' + this.access_token + '"}'); 
     }, 

     ready: function() { 
     this.$.ajax.generateRequest();  
    }, 
    }); 

    </script> 
    </dom-module> 

随着就绪功能设置帕拉姆:

<dom-module id="onedrive-files"> 
    <template> 
    <iron-ajax id="ajax" url="https://api.onedrive.com/v1.0/drive/root" last-response="{{data}}" auto></iron-ajax> 
    </template> 

    <script> 

    Polymer({ 
     is: 'onedrive-files', 
     properties: { 
     access_token: String 
     }, 

     ready: function() { 
     this.$.ajax.params = '{"access_token":"' + this.access_token + '"}'; 
    }, 
    }); 

    </script> 
</dom-module> 
+0

这里同样的问题。不幸的是,它也弄乱了我的查询,但我认为这应该在未来的版本中得到修复。 –

+0

我正面临与铁ajax 2.0相同的问题!我不知道是什么给了。 –

回答

7

看起来这是动态属性的另一个限制。因此,对于这类案件通常是后备getter函数:

<iron-ajax url="https://api.onedrive.com/v1.0/drive/root" params='{{_getParams(access_token)}}'></iron-ajax> 

...

<script> 

    Polymer({ 
    is: 'onedrive-files', 
    properties: { 
    access_token: String 
    }, 
    _getParams:function(access_token) { 
     return {access_token:access_token}; 
    } 
}); 
</script> 
4

params属性是一个对象,它看起来像从HTML属性解析(这是字符串)只发生在附件上。

恕我直言,最简单的解决方案是在生成请求之前设置它。 但设置一个对象,而不是一个字符串。它会生成一个GET参数foreach元素的params对象,一个字符串是一个字符列表,所以每个字符一个GET参数...

this.$.myAjaxElement.set('params', {"access_token": this.access_token }); 
this.$.myAjaxElement.generateRequest();