javascript - Jquery 将 JSON 发布到本地文件

标签 javascript android jquery json cordova

我正在开发一个 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.stringifyJSON.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/

相关文章:

javascript - jQuery setInterval 不起作用

javascript - 用户在文本区域中输入文本后显示 Div?

java - 将java应用程序移植到Android平台

javascript - ajax 哈希导航无法正常工作

jquery - :not([attr ="value"]) and [attr! ="value"之间的性能有区别吗?

javascript - 我如何评估 casperjs 中是否存在警报?

javascript - 显示/隐藏部分表条目

android - 更新 Activity 的 Intent

android - org.gradle.api.tasks.compile.CompileOptions.setBootClasspath(Ljava/lang/String;)V'

jQuery : Setting a dropdownlist to readonly until data is finished loading