我使用Node和MySQL作为后端,使用Polymer作为前端,我无法让Polymer渲染JSON数组。
节点/ MySQL代码
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
database : 'test'
});
connection.connect();
connection.query('SELECT * FROM ACTIVITY', function(err, rows, fields) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
json = JSON.stringify(rows);
console.log(json);
});
connection.end();
聚合物前端
<paper-dropdown-menu label="Activity Selection">
<iron-ajax
id="getActivity"
auto
url="scripts/dbcon.js"
handle-as="json"
on-response="handleResponse"
last-response="{{ajaxResponse}}">
</iron-ajax>
<paper-listbox class="dropdown-content">
<template is="dom-repeat" items="[[ajaxResponse]]">
<paper-item><b>{{item.ACTIVITY_NAME}}</b></paper-item>
</template>
</paper-listbox>
</paper-dropdown-menu>
JSON输出
[{"ID":1,"ACTIVITY_NAME":"Coffee"},{"ID":2,"ACTIVITY_NAME":"Gym"},{"ID":3,"ACTIVITY_NAME":"Lunch"},{"ID":4,"ACTIVITY_NAME":"Vending Machine"},{"ID":5,"ACTIVITY_NAME":"Pool"}]
当我运行此命令时:node dbcon.js
,console.log
的输出是上面显示的JSON数组。
由于某种原因,Polymer不识别JSON数组。在Chrome DevTools控制台中,没有错误/输出。
在另一个测试场景(工作正常)中,我手动将JSON数组输出复制到文件中,将url
参数从"scripts/dbcon.js"
更改为"scripts/test.json"
,然后重新加载电子应用;和Polymer能够在下拉列表中显示JSON内容。
答案 0 :(得分:1)
<iron-ajax>.url
属性用于指定请求的URL目标。它不会像JavaScript那样执行响应(就像<script>
标记一样),这似乎是您所期待的。
在您的情况下,<iron-ajax>
正在读取scripts/dbcon.js
的内容并尝试将其解析为JSON(因为handle-as="json"
)。解析失败,导致null
响应值。
要解决此问题,您应该将<iron-ajax>.url
设置为提供JSON响应的节点服务器的URL。