Javascript Jquery将JSON发布到本地文件
我正在开发一个Phonegap应用程序,使用jQuery Mobile下载一个关于服务器状态的JSON文件,出于测试目的,我正在使用一个保存到本地文件夹结构中的JSON文件 我能够使用jQueryJavascript Jquery将JSON发布到本地文件,javascript,android,jquery,json,cordova,Javascript,Android,Jquery,Json,Cordova,我正在开发一个Phonegap应用程序,使用jQuery Mobile下载一个关于服务器状态的JSON文件,出于测试目的,我正在使用一个保存到本地文件夹结构中的JSON文件 我能够使用jQuery$.getJSON函数轻松读取文件并显示其数据,但我不确定如何使用$.postjQuery函数将数据保存回文件中 $.getJSON(“js/servers.json”)可以完美地获取json数据(js/servers.json存储在本地文件结构中),但是当我尝试$.post(“js/servers.j
$.getJSON
函数轻松读取文件并显示其数据,但我不确定如何使用$.post
jQuery函数将数据保存回文件中
$.getJSON(“js/servers.json”)
可以完美地获取json数据(js/servers.json存储在本地文件结构中),但是当我尝试$.post(“js/servers.json”,jsonServerObj)”时,
其中jsonServerObj是我使用$获得的json。getJSON
在页面重新加载时,数据似乎没有正确地保存到文件中
我的get函数:
$.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!");
});
以及我的帖子功能:
$.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不是应该保存的
作为参考,我正在运行安卓4.3的安卓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应用程序安装在设备上,即使用户手动关闭或停止,该应用程序的本地存储数据也是持久的
我还通过以下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。如果来自非本地web服务的任何JSON数据可能被来自此应用程序的输入以外的内容更改,我不建议使用localStorage,因为这只是我正在原型化的应用程序的概念证明。您将需要一个在本地运行的web服务器。您的http客户端(浏览器或其他)可以访问本地系统以读取
GET
,但不能写入POST
。或者您可以获取JSON对象,而不是尝试将其存储在文件中,只需使用localStorage。您必须使用localStorage将字符串化
和解析
。如果您需要与该文件交互,那么您可以查看该文件,以便写回该文件。好的,这很有意义。由于这只是出于测试目的,我假设localStorage是正确的方式,但是当我可以访问web服务器时,$.post
功能将正常工作,对吗?