概要
这次我们将以实际发生的问题作为范例,讲述如何修改代码。
想必大家一定有过使用REST API来获取记录(GET)的情况吧。
kintoneAPI一次可以GET的记录上限值500件(2015年8月现在),
处理500件以上记录的情形,需要使用循环来获取余下的记录。
接下来让我们来看一下发生问题的代码的范例。
出问题的范例
while (!loopendflg) { var query = encodeURIComponent('order by 记录编号 asc limit 100 offset ' + offset); var appUrl = kintone.api.url('/k/v1/records') + '?app=' + kintone.app.getId() + '&query=' + query; // 执行同步请求 var xmlHttp = new XMLHttpRequest(); xmlHttp.open("GET", appUrl, false); xmlHttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xmlHttp.send(null); //获取到的记录放在数组里 if (xmlHttp.responseText !== '{"records":[]}') { var respdata = JSON.parse(xmlHttp.responseText); for (var i = 0; respdata.records.length > i; i++) { records.push(respdata.records[i]); } offset += respdata.records.length; }else { loopendflg = true; } }
是什么问题呢!?
上面的代码使用应答的字符串来判断循环的结束。(12行)
但是,由于2015年7月的更新,在应答里加了"totalCount"元素,
应答的结果变成了 “{"records":[],"totalCount":null}” ,变成了无法比较的状态。
由于应答是使用json形式返回的,推荐parse后使用 “records.length”,作为数据而不是文字串来处理。
推荐的范例
while (!loopendflg) { var query = encodeURIComponent('order by 记录编号 asc limit 100 offset ' + offset); var appUrl = kintone.api.url('/k/v1/records') + '?app=' + kintone.app.getId() + '&query=' + query; // 执行同步请求 var xmlHttp = new XMLHttpRequest(); xmlHttp.open("GET", appUrl, false); xmlHttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xmlHttp.send(null); //获取到的记录放在数组里 var respdata = JSON.parse(xmlHttp.responseText); if (respdata.records.length > 0) { for (var i = 0; respdata.records.length > i; i++) { records.push(respdata.records[i]); } offset += respdata.records.length; }else { loopendflg = true; } }
最后
当更新后,应答里追加附带信息的情形,像上面这样直接使用应答结果的字符串是非常危险的。
请一定要先parse以后作为数据来处理。
另外,下面链接的文章,可作为参考写出更为现代的代码。
希望对kintone的学习有帮助。