jQuery AJAX:如何将大型HTML标记作为参数传递?

时间:2010-05-14 06:51:30

标签: jquery ajax

如何使用jQuery AJAX将大型HTML标记数据传递给我的PHP?当我收到结果时,这是错误的。

jQuery AJAX代码

$('#saveButton').click(function() {
        // do AJAX and store tree structure to a PHP array 
        //(to be saved later in database)
        var treeInnerHTML = $("#demo_1").html();
        alert(treeInnerHTML);
        var ajax_url = 'ajax_process.php';
        var params = 'tree_contents=' + treeInnerHTML;
        $.ajax({
            type: 'POST',
            url: ajax_url,
            data: params,
            success: function(data) {
                $("#show_tree").html(data);

            },
            error: function(req, status, error) { }
        });
});

treeInnerHTML实际值

<ul class="ltr">
   <li id="phtml_1" class="open">
       <a href="#"><ins>&nbsp;</ins>Root node 1</a>
       <ul>
           <li class="leaf" id="phtml_2">
             <a href="#"><ins>&nbsp;</ins>Child node 1</a>
           </li>
           <li class="last leaf" id="phtml_3">
             <a href="#"><ins>&nbsp;</ins>Child node 2</a>
           </li>
       </ul>
   </li>
   <li id="phtml_5" class="file last leaf">
       <a href="#"><ins>&nbsp;</ins>Root node 2</a>
   </li>
</ul>

从我的show_tree div 返回结果:

<ul class="\&quot;ltr\&quot;">
   <li id="\&quot;phtml_1\&quot;" class="\&quot;open\&quot;">
       <a href="%5C%22#%5C%22"><ins></ins></a>
   </li>
</ul>

3 个答案:

答案 0 :(得分:5)

查看将字符串中的参数更改为对象有助于:

var params = { tree_contents: treeInnerHTML };

请参阅http://jsfiddle.net/7bF2Y/

答案 1 :(得分:4)

var params = 'tree_contents=' + encodeURIComponent(treeInnerHTML);

TreeInnerHTML在第一个&标记被截断(因为POST数据使用var1=val&var2=val2&...格式),结果HTML的其余部分是您的浏览器自动关闭未关闭的标记。

答案 2 :(得分:1)

您传递的值没有对其进行URL编码,因此可能无法在服务器上正确解析。正如 Salman A 所说,你应该让jQuery通过传递字典来为你解决这个问题:

var params = { tree_contents: treeInnerHTML };