我正在使用jQuery Mobile开发一个Phonegap应用程序来下载有关服务器状态的JSON文件,出于测试目的,我使用保存在本地文件夹结构中的JSON文件。
我能够使用jQuery $.getJSON
函数轻松读取文件并显示数据,但我不确定如何使用$.post
jQuery函数将数据保存回文件
$.getJSON("js/servers.json")
用于完美地获取JSON数据(js / servers.json存储在本地文件结构中),但是当我尝试使用$.post("js/servers.json", jsonServerObj)
时,jsonServerObj是我使用的{{1}在页面重新加载时,数据似乎没有正确保存到文件中。
我的功能:
$.getJSON
我的帖子功能:
$.getJSON("js/servers.json").success(function (data)
{
jsonServerObj = data;
// Do stuff with data
});
jsonServerObj被设置为JS文件的全局变量,post函数每次都返回成功警报,但是当重新加载页面时,JSON不应该保存。
作为参考,我在运行Android 4.3的Android HTC One上进行测试
答案 0 :(得分:2)
根据评论,这是我解决自己问题的方法:
好的,所以不可能像某些评论所提到的那样发布到本地文件,但是按照建议使用localStorage和JSON.stringify
以及JSON.parse
,数据仍然可以像这样存储在本地:
function getServerData()
{
$.getJSON("js/servers.json").success(function (data)
{
// Add JSON to localStorage under serverData
localStorage.setItem("serverData", JSON.stringify(data));
// Do stuff
}
}
检索时,我发现你必须首先检索数据,然后将其解析回JSON对象,如下所示:
function retrieveData()
{
var temp = localStrage.getItem("serverData");
var jsonData = JSON.parse(temp);
// Do stuff with JSON data
}
此外,我了解到,只要应用程序安装在设备上,即使用户手动关闭或停止,Phonegap应用程序的localStorage数据也是持久的。
我还通过if / else语句检查数据是否已经存在:
if (typeof (Storage) != "undefined")
{
if (!localStorage.getItem("serverData"))
{
alert("setting server data");
// Ajax JSON to get server information
getServerData();
}
else
{
retrieveData();
}
}
else
{
alert("localStorage unavailable!");
}
除非应用程序在安装后第一次打开,否则此语句通常会对两个ifs都返回true。我建议不要将localStorage用于来自非本地Web服务的任何JSON数据,如果该数据很可能被该应用程序的输入以外的其他内容更改,因为这只是我正在进行原型设计的应用程序的概念证明