上一篇博文“利用HTML5新特性localstorage把用户数据暂时存储在客户端,用于之后上传”里提到了用for循环,但是今天发现for循环不起作用。最终post请求只执行了一次,代码如下
for(i=localStorage.length-1;i>=0;i--){//从后往前依次取每条localstorage
local_key=localStorage.key(i);
if(local_key.length>8 && !isNaN(local_key))//key名大于8位且是数字
{
local_val=localStorage.getItem(localStorage.key(i));
local_array=local_val.split(",");//以逗号隔开的数据放入各自数组
$scope.local_ygbh = local_array[0];
$scope.local_khbh = local_array[1];
local_post($scope.local_ygbh,$scope.local_khbh,local_key);//该函数只在循环结束后执行一次,参数为拍最前的那一组
};
}
function local_post(a,b,j)
{
//POST到数据库
myHttp.post({
req : {
service : 'P9999999',
bex_codes : 'insertzxthlskandkhmx',
v_ygbh : a,
v_khbh : b
}
}).then(function(data) {
var info = data.msg;
if (!isNaN(info[0].code)) {// 返回非数字或者数据库插入异常结果,则不删除此条数据
localStorage.removeItem(j);//删除此条数据
}
});
}
从网上查可以用匿名函数闭包的方法,但试验了一下,并不能解决:
for(var i = 0; i < 10; i++) {
(function(e) {
setTimeout(function() {
console.log(e);
}, 1000);
})(i);
}
目前还不知道解决办法,但还好不影响功能的正常使用,改为每分钟执行一次,就可以满足需求了。