【问题标题】:Jquery posting JSON to local fileJquery将JSON发布到本地文件
【发布时间】:2014-03-20 14:49:32
【问题描述】:

我正在开发一个 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 时,数据没有似乎在页面重新加载时正确保存到文件中。

我的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!");
});

jsonServerObj 被设置为 JS 文件的全局变量,并且 post 函数每次都返回成功警报,但是当页面重新加载时,JSON 不是应该保存的。

作为参考,我正在运行 Android 4.3 的 Android HTC One 上进行测试

【问题讨论】:

  • 您需要一个在本地运行的 Web 服务器。您的 http 客户端(浏览器或其他)可以访问本地系统以读取 GET,但不能写入 POST
  • 或者您可以获取 JSON 对象,而不是将其存储在文件中,只需使用 localStorage。你必须 stringifyparse 虽然使用 localStorage。如果您需要与文件交互,那么您可以查看File API 以写回文件。
  • 好的,这很有道理。由于这仅用于测试目的,我认为 localStorage 将是正确的方法,但是当我可以访问 Web 服务器时,$.post 函数将正常工作,这是正确的吗?

标签: javascript android jquery json cordova


【解决方案1】:

这是我自己的问题的解决方案,基于 cmets:

好的,因此无法像某些 cmets 提到的那样发布到本地文件,但是按照建议使用 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!");
}

此语句通常对两个 if 都返回 true,除非应用程序在安装后第一次打开。我不建议对来自非本地 Web 服务的任何 JSON 数据使用 localStorage,如果该数据可能会被此应用程序的输入以外的其他东西更改,因为这只是我正在原型设计的应用程序的概念证明.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 2011-09-13
    相关资源
    最近更新 更多