【问题标题】:How would I save my Javascript objects with JSON/PHP/Mysql, to re-load them upon user return?如何使用 JSON/PHP/Mysql 保存我的 Javascript 对象,以便在用户返回时重新加载它们?
【发布时间】:2011-01-29 03:12:48
【问题描述】:

我正在努力创建一个“沙盒”,众多用户将在其中登录并在他们自己的“沙盒”上创建可拖动的“节点”。我希望能够在每次修改后自动保存应用程序,但首先要做的是——我试图将我的 Javascript 对象存储在 MySQL 中。

我是 Javascript、PHP 和 MySQL 的新手,但 JSON 似乎是我完成这项任务的最佳朋友。这是一个节点的粗略示例:

node1.pos
node1.name
node1.content
node1.siblings

*注意:实际节点将包含更多属性,其中一些具有潜在的敏感信息。

我的目标是让用户操作每个节点(拖动、链接到兄弟姐妹、更改名称等),然后在重新访问页面时,“沙盒”会重新填充正确位置的节点,以及与之关联的所有正确数据。

我认为我可以处理将填充画布的函数,但是在 MySQL 和 Javascript 之间转换对象让我感到困惑。有方法的对象会不会出问题?

有没有人有任何可以帮助我的帮助、建议或参考资料?

【问题讨论】:

  • 不是一个真正的答案,但可以考虑一些有趣的事情:github.com/zefhemel/persistencejs
  • "有方法的对象会不会出问题?" 是的。 JSON 不能将函数存储为数据,这就是我创建单独的dataPacket 的原因。使用我为 load.php 服务发布的代码,如果服务器返回一个字符串,jQuery 会自动将其解析为 JSON(仅当它是有效的 JSON 时),您最终会得到一个 JavaScript对象。

标签: php javascript mysql json object


【解决方案1】:
  1. 我建议您创建一个 Web 服务来存储用户发送的任何数据。我们称之为 http://server.net/store.php

  2. 然后,客户端将使用 JavaScript 将有意义的数据以及一些用户凭据序列化为 JSON...

    var dataPacket = {
        userCredentials: 77777777, /* whatever is sensible */
        nodes: [ {id: 1, posX: 10, posY: 345 }, {id: 2, posX: 5, posY: 136} ]
    };
    
  3. 然后客户端会使用 jQuery + AJAX 将数据发送到服务器...

    $.ajax({
       type: "POST",
       url: "http://server.net/store.php",
       dataType: "json",
       data: dataPacket
     });
    
  4. 然后,在服务器端检查数据是否有有效的用户凭据,然后它可以继续在某种数据库中保存接收到的 JSON 编码数据,这实际上只是一个纯字符串。

  5. 创建一个 Web 服务,该服务将从数据库中读取并返回任何以前存储的数据。我们称之为 http://server.net/load.php

  6. 当用户需要加载他之前正在做的事情时,客户端会使用 JavaScript 来请求数据...

    $.ajax({
       type: "POST",
       url: "http://server.net/load.php",
       dataType: "json",
       data: {
           userCredentials: 77777777, /* whatever is sensible */
       }
       success: function(dataPacket) {
          /* process the received dataPacket */
       }
     });
    

请注意,代码依赖于jQuery,仅作为示例提供,我还没有实际测试过。


另见:

希望这会有所帮助。

上帝保佑!

【讨论】:

  • 非常感谢。我将 JQuery 用于 UI,因此在其他地方使用它不是问题。您能否详细说明用户凭据?这是用户发送数据的标识符吗?
  • 凭据可以像用户名一样简单。如果您希望它更复杂,您可以创建一个登录服务,该服务将接收登录名 + 密码并返回各种内部 id(如连接的用户名和密码的加密版本,或任何合适的)。此 id 将用作凭据,以避免一直发送用户名 + 密码。因此,您只需第一次发送登录信息,然后客户端将使用服务器返回的 id。但可能有更好的方法来处理这个问题。
【解决方案2】:

我突然想到的一个建议:

即时保存编辑:

创建一个除了接受来自用户的 POST 请求之外什么都不做的 PHP 页面(您显然希望有某种形式的身份验证,以便随机数不能只用随机数据点击页面,但这是另一回事) .此页面将全权负责接受来自用户的 AJAX 请求。

使用 jQuery 的 UI 库之类的东西创建您的沙盒页面(尤其是,如果您是新手,请使用预先编写的东西,不要尝试自己编写)。这将是一个 PHP 页面,它将简单地加载您的 AJAX 处理页面已经存储在数据库中的任何值。使用 jQuery 的drag and drop methods,您可以检测元素何时被移动。在移动端,您将使用 jQuery 的 .ajax 功能将元素和坐标发送到 ajax 处理页面。

下次用户登录时,根据需要添加/定位元素将是微不足道的。

【讨论】:

  • labs.inversepenguin.com 将 Jquery UI Draggable 与 Mapbox 相结合——“节点”和“沙盒”。该节点尚未与 javascript 对象关联,但我喜欢使用 ajax 提交到 PHP 处理页面的想法......我只需要在几个不同的地方/方式发布数据。
  • 我们的想法几乎相同;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
相关资源
最近更新 更多