【问题标题】:Local storage counter output本地存储计数器输出
【发布时间】:2015-01-13 02:29:18
【问题描述】:

我正忙着制作一个 phonegap 应用程序,我在其中捕获许多变量并通过电子邮件发送它们(为简单起见,我将其简化为最基本的部分)。

我正在尝试将电子邮件的主题存储在本地存储中,以便在一天结束时通过单独的点击功能发送它们,然后从本地存储中删除它们。

我发送电子邮件的代码如下所示(注意我将“var newFileName”存储在本地存储中):

function sendMail(imageURI, click){
                var newFileName =  'the fileName';

                localStorage.setItem('newFileName', newFileName);



                cordova.plugins.email.addAlias('gmail', 'com.google.android.gm');
                cordova.plugins.email.open({
                    app: 'gmail',
                    to: 'user@gmail.com',
                    subject: newFileName,
                    body: 'this is the body',
                    attachments: [imageURI],
                    isHtml:  true
                });

            };

现在我将变量存储在本地存储中,我想发送使用另一个函数保存的所有内容:

function endOfDay(data){
                var text = [];
                var ending = localStorage.getItem('newFileName');
                var salesman = $('#agent').val();
                var newsFileName = 'End of Day Report for Agent: ' + salesman;

                cordova.plugins.email.addAlias('gmail', 'com.google.android.gm');
                cordova.plugins.email.open({
                    app: 'gmail',
                    to: 'user@gmail.com',
                    subject: newsFileName,
                    body: 'end of day:' + ending,
                    isHtml:  true
                });

这可行,但它只显示最近发送的电子邮件主题。因此,每次我发送一封新电子邮件时,本地存储似乎都会过度写入主题,而我想要做的是发送全天发送的所有主题,然后在成功时从本地存储中删除

【问题讨论】:

  • 使用 json 来保存一个数组而不是一个数组。 PS:使用 localStorage 作为“命名空间”而不是方法更方便; var 结尾= JSON.parse(localStorage.newFileName);和 localStorage.newFileName=JSON.stringify(newFileName);

标签: javascript jquery cordova storage local


【解决方案1】:

在 locastorage 中保存时这样做

var newFileName =  'the fileName';
var temp=localstorage.getItem('newFileName');
var somearray=temp.split(',');
somearray_length=somearray.length;
somearray[somearray_length]=newFileName;
var somestring=somearray.join(',');
localStorage.setItem('newFileName',somestring);

一天结束时

ending=localstorage.getItem('newFileName');
localStorage.setItem('newFileName',"");  //clear memory

我使用逗号(,)作为分隔符,使用任何不会出现在主题行中的唯一字符。

【讨论】:

  • 啊我现在看到错误是因为 localStorage 有一个小写的“s”。当我发送一天结束报告时,我看到它只显示最近的主题两次,而不是存储已发送的每个主题行。所以它发送“主题 3,主题 3”而不是“主题 1,主题 2,主题 3,等等......”。
  • 感谢您的回答:) 无论如何要输出存储在 localStorage 中的“newFileName”的所有主题?如“主题 1、主题 2、主题 3 等……”?
  • 这段代码应该保存所有的主题。如果你在最后打印ending,它应该包括主题1、主题2、主题3等等
  • 我发送了一堆测试邮件以获得一些主题行,当我发送一天结束的邮件时,它只显示最新的主题两次“主题 3,主题 3”。可能是 localStorage 在 sendMail 函数触发之前获取变量吗?主题变量正在获取存储表单信息的其他变量的值:
【解决方案2】:

好的,它现在正在工作。解决方案是:

var newFileName = 'N' + result + '_' + agent + '_' + todayDate + '_' + newURI + '_' + depot + '_' + date;

localStorage.setItem('newFileName', localStorage.getItem('newFileName') + "," + newFileName );

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 2021-05-19
    • 2015-10-10
    • 1970-01-01
    • 2014-06-15
    • 2014-04-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多