我有一个可以在我的localhost上运行的页面..当我把它放在远程服务器上时,它出错了。返回错误的代码是
var $app_list = localStorage.getItem('LsAppList');
var AppListJson = JSON.parse($app_list);
AppListJson.push({
"extapp_id": appdetail.get("addAppId"),
"desc": appdetail.get("addAppName"),
"device_no": appdetail.get("devicenoValue"),
"validation_key": appdetail.get("activationkeyValue")
});
控制台日志
Uncaught TypeError: Cannot read property 'push' of null
addToJson EncigoHome.js:126
n.extend.trigger kendo.mobile.min.js:9
s.extend._release kendo.mobile.min.js:15
i._userEvents.o.UserEvents.tap kendo.mobile.min.js:15
n.extend.trigger kendo.mobile.min.js:9
l.extend.notify kendo.mobile.min.js:13
u.extend._trigger kendo.mobile.min.js:13
u.extend.end kendo.mobile.min.js:13
l.extend._eachTouch kendo.mobile.min.js:13
l.extend._end kendo.mobile.min.js:13
arguments.length.t.(anonymous function) kendo.mobile.min.js:10
b.event.dispatch jquery-1.9.1.js:9593
v.handle
答案 0 :(得分:1)
.push()
方法只能用于数组。
您似乎没有将该项目存储在localStorage
中,这就是它返回null
的原因
答案 1 :(得分:1)
localStorage
(更具体地说是same origin)。与远程域关联的localStorage
无权访问与您的localhost关联的localStorage
中存储的值。
您应检查是否存储了值并回退到默认值或处理错误:
var $app_list = localStorage.getItem('LsAppList');
var AppListJson = $app_list != null ? JSON.parse($app_list) : [];
//...
更详细:
var $app_list = localStorage.getItem('LsAppList'),
AppListJson;
if ($app_list != null) {
AppListJson = JSON.parse($app_list);
} else {
// treat no LsAppList stored case
// you could show a message or set it to a default value
AppListJson = [];
}
此"以前没有存储数据"每当用户清除浏览器数据或切换浏览器/设备时,都会发生这种情况,因此必须正确对待它。
错误的根本原因(正如您可能已经发现的那样)是localStorage.getItem(key)
在当前没有为给定null
存储值时返回key
域。然后JSON.parse(null) === null
和null.push()
抛出。
就像一个挑剔的,我建议检查你的变量命名:
PascalCase
命名。camelCase
与下划线命名约定混合在一起。而且,AppListJson
不是JSON,它是本机数组。 JSON只能存在于字符串上下文中,即您的$app_list
是JSON。有关JSON /而不是JSON的更深入的解释:There's no such thing as a "JSON Object"