Как я могу передать большие данные HTML-тэга своему PHP использование Ajax jQuery? Когда я получаю результат, это неправильно.
код Ajax jQuery:
$('#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> </ins>Root node 1</a>
<ul>
<li class="leaf" id="phtml_2">
<a href="#"><ins> </ins>Child node 1</a>
</li>
<li class="last leaf" id="phtml_3">
<a href="#"><ins> </ins>Child node 2</a>
</li>
</ul>
</li>
<li id="phtml_5" class="file last leaf">
<a href="#"><ins> </ins>Root node 2</a>
</li>
</ul>
Возвращенный результат моего show_tree отделения:
<ul class="\"ltr\"">
<li id="\"phtml_1\"" class="\"open\"">
<a href="%5C%22#%5C%22"><ins></ins></a>
</li>
</ul>
Посмотрите, помогает ли изменение параметров из строки в объект:
var params = { tree_contents: treeInnerHTML };
Вы передаете значение без URL-кодирования, поэтому, вероятно, оно неправильно обрабатывается на сервере. Как сказал Салман A , вы должны заставить jQuery позаботиться об этом за вас, передав вместо этого словарь:
var params = { tree_contents: treeInnerHTML };
var params = 'tree_contents=' + encodeURIComponent(treeInnerHTML);
TreeInnerHTML отключается при первой отметке &
(поскольку данные POST используют формат var1 = val & var2 = val2 & ...
), оставшаяся часть результирующего HTML - это ваш браузер, автоматически закрывающий незакрытые теги.