我正在开发一个 Phonegap 应用程序,使用 jQuery Mobile 下载有关服务器状态的 JSON 文件,出于测试目的,我使用保存在本地文件夹结构中的 JSON 文件。
我可以使用 jQuery $.getJSON
函数轻松读取文件并显示它的数据,但我不确定如何使用 将数据保存回文件中>$.post
jQuery 函数。
$.getJSON("js/servers.json")
可以完美地获取 JSON 数据(js/servers.json 存储在本地文件结构中)但是当我尝试 $.post("js/servers.json", jsonServerObj)
其中 jsonServerObj 是我使用 $.getJSON
获得的 JSON 数据似乎没有正确保存到文件中页面重新加载。
我的获取函数:
$.getJSON("js/servers.json").success(function (data)
{
jsonServerObj = data;
// Do stuff with data
});
还有我的帖子功能:
JSON.stringify(jsonServerObj);
$.post("js/servers.json", jsonServerObj).success(function ()
{
alert("Data sent!");
})
.error(function ()
{
alert("UH OH ERROR!");
});
jsonServerObj 被设置为 JS 文件的全局变量,post 函数每次都返回成功警报,但是当页面重新加载时,JSON 不是应该保存的。
作为引用,我正在运行 Android 4.3 的 Android HTC One 上对此进行测试
最佳答案
根据评论,这是我对自己问题的解决方案:
好的,所以无法像某些评论中提到的那样发布到本地文件,但是可以使用 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 返回真,除非应用程序是在安装后首次打开。我不建议对来自非本地 Web 服务的任何 JSON 数据使用 localStorage,如果该数据可能会被该应用程序的输入以外的其他内容更改,因为这只是我正在制作原型(prototype)的应用程序的概念证明.
关于javascript - Jquery 将 JSON 发布到本地文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22536620/