代码之家  ›  专栏  ›  技术社区  ›  Chris

如何用javascript捕获DOM修改并将其发送到PHP服务器

  •  0
  • Chris  · 技术社区  · 15 年前

    我被要求创建一个Web用户界面,允许用户修改HTMLDOM的特定部分,然后将修改内容发布回服务器进行存储。修改应该通过拖放完成,我选择的工具是jquery。服务器将是PHP,但由于我不是PHP程序员,所以由其他人编写。

    我能想到的唯一方法是在修改完整个DOM部分后,通过Ajax将其发送回服务器。然而,这是昂贵的,因为该部分可能相当大。此外,我不确定如何有效地捕获修改后的部分,并将其写入可以发送到服务器的字符串中。重叠事件也是一个大问题。

    有什么更好的方法吗?是否有我应该考虑的库/工具(javascript或服务器端)?非常感谢。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Bostone    15 年前

    如果你处理的是一些元素列表,比如说表中的行,你可以发送一个映射,其中特定的行被映射到一个位置,然后当你重新初始化页面时,你可以反馈这样的映射并重新排列列表。 另外-另一个想法(因为您使用的是PHP),您可以在后端有某种模型,它支持您的可视DOM元素,然后再次-您发送一些您更改的参数(顺序、大小等),并调整/保存模型

        2
  •  0
  •   lamelas    15 年前

    不要发送整个dom部分,您应该尝试将要发送的dom部分序列化为更轻量的部分(如json)。因为它是HTML,所以将其序列化为JSON将大大减小它的大小。 除此之外,我认为除了一些允许服务器保存更改的Ajax请求之外,没有什么可以做的。

        3
  •  0
  •   Steven    15 年前

    您需要使用类似于ui插件的东西来帮助实际的拖放/重新组织。我不知道有什么库可以以特定的方式将DOM对象和Ajax信息挑选到服务器上,所以您可能需要自己编写类似的代码来满足您的特定需求。知道要发送的是哪种类型的DOM节点可能会有所帮助。

    如果您正在构建类似于自定义WYSIWYG的东西,那么发送整个节点可能是最好的方法,而不会丢失信息。如果您正在做一些简单的事情,比如允许用户拖放以重新排序列表,那么下面的代码可能就足够了:

    var toPost = '';
    function handler(data) {//handle server response}
    $("ul#container li").each(function(){toPost+=this.getAttribute('rel');});
    $.post('processing_script.php',{data:toPost},handler);
    

    我了解了谷歌是如何处理这些问题的。如果在iGoogle主页上拖放一个元素,将向Google处理脚本发送一个带有以下参数的get请求:

    et  '4af26272PQUMZP8V'
    mp  '19_1:4_1:7_1:13_1:16_1:18_2:2_2:3_2:14_2:11_2:_opt_3:17_3:6_3:12_3'