jQuery通过POST方法发送HTML数据

24

我正在使用jQuery将一个div的HTML内容以POST方式发送到一个PHP文件,这个div中包含表格、输入框、较小的div,我想获取主DIV的内容并将其发送到数据库。 我能想到的唯一选项是POST方法,但我不知道是否可以使用它发送纯HTML。 是否有其他选项可以将来自div的HTML内容发送到PHP文件以插入到MySQL中?

谢谢。

编辑: 现在我能够使用jQuery的POST发送完整的HTML数据了。 但是,来自该DIV的HTML字符会转换为特殊字符。例如:">"会变成">",当发生这种情况时,我的POST数据受到限制,只能取第一个特殊字符出现的位置,因为我这样进行ajax POST:

var data = 'id='+ currid +'&html='+ div_html;

    $.ajax({
          type: "POST",
          url: "file.php",
          data: data,
    .......................
    .......................

使用这段代码是不好的,因为 div_html 包含其他 "&" 字符,所以它将被视为要发送的另一个 POST 参数。

有什么解决办法吗?

再次感谢。

3个回答

47

就你而言,一旦使用诸如.html()这样的方法“提取”内容,它就只是一个字符串。你可以使用以下代码进行测试:

<html> 
  <head>
    <title>runthis</title>
    <script type="text/javascript" language="javascript" src="jquery-1.3.2.js"></script>
    <script type="text/javascript">
        $(document).ready( function() {
            var x = $("#foo").html();
            alert( typeof(x) );
        });
    </script>
    </head>
    <body>
        <div id="foo"><table><tr><td>x</td></tr></table><span>xyz</span></div>
    </body>
</html>

警报文本是一个字符串。只要你不将其传递给解析器,它就像任何其他字符串一样,没有什么特别之处。
没有什么阻止你使用.post()将这个字符串发送回服务器。

编辑:不要将字符串作为data参数传递给.post(),而应该传递对象,例如

var data = {
  id: currid,
  html: div_html
};
$.post("http://...", data, ...);

jQuery将处理参数的编码。
如果您(出于任何原因)想要保留字符串,则必须使用类似于escape()的方法对值进行编码。

var data = 'id='+ escape(currid) +'&html='+ escape(div_html);

只是为了双重确认我的理解:如果您不搞乱它,JQuery足够聪明地处理编码。这听起来对吗? - RonLugge
RonLugge:是的,通过传递对象(即基本上是键值对),您可以向jquery“表达您的意图”,它会处理请求参数的编码。 - VolkerK

1

我不明白为什么你不能通过post发送HTML内容。

如果你遇到任何问题,你可以使用某种编码/解码方式 - 但我认为你不需要这样做。


1

如果您想将任意数量的数据发送到服务器,POST 是唯一可靠的方法。GET 也可以实现,但是客户端和服务器仅允许有限的 URL 长度(大约2048个字符)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接