Почему ajax иногда urlencode сериализует данные, а иногда нет?

Когда я отправляю сериализованные данные в файл PHP, используя ajax, иногда это кодируется URL в зависимости от того, как я это делаю.

Первоначально у меня был следующий код, который работал нормально:

$.ajax({
type: 'POST',
url: 'ajax-process.php',
data: $("#sitestructure-form").serialize(),
success: function(d){$("#structureupdate").html(d);}
});

Данные были отправлены в мой файл PHP, и я мог повторить это, и это выглядело так.

[{"id":20,"children":[{"id":21}]},{"id":19},{"id":18,"children":[{"id":14}]},{"id":16},{"id":13,"children":[{"id":11}]},{"id":17},{"id":15},{"id":12}]

Я хотел отправить более одного фрагмента данных, я назвал сериализованные данные «заказ» и добавил «процесс», поэтому я обновил свой код следующим образом:

$.ajax({
type: 'POST',
url: 'ajax-process.php',
data: {
order: $("#sitestructure-form").serialize(),
process: "sitemap-reordernavigation"},
success: function(d){$("#structureupdate").html(d);}
});

Однако когда я получаю сериализованные данные, отправленные в порядке, вывод выглядит так:

data=%5B%7B%22id%22%3A20%2C%22children%22%3A%5B%7B%22id%22%3A21%7D%5D%7D%2C%7B%22id%22%3A19%7D%2C%7B%22id%22%3A18%2C%22children%22%3A%5B%7B%22id%22%3A14%7D%5D%7D%2C%7B%22id%22%3A16%7D%2C%7B%22id%22%3A13%2C%22children%22%3A%5B%7B%22id%22%3A11%7D%5D%7D%2C%7B%22id%22%3A17%7D%2C%7B%22id%22%3A15%7D%2C%7B%22id%22%3A12%7D%5D

Единственный способ решить эту проблему — использовать php для его кодирования, а затем использовать str_replace для удаления бита «data =» в начале, вот так.

    $data = str_replace("data=","",urldecode($_POST['order']));

Как я могу заставить это работать с AJAX, хотя мне не нужно его кодировать?

Я попытался использовать переменную и установить для processData значение false, однако это не сработало.

var order = $("#sitestructure-form").serialize();
$.ajax({
type: 'POST',
url: 'ajax-process.php',
processData: false,
data: {
order: order,
process: "sitemap-reordernavigation"},
success: function(d){$("#structureupdate").html(d);}
});

Мои знания AJAX / Jquery довольно ограничены, поэтому любая помощь будет принята с благодарностью.

1

Решение

Это потому, что вы впервые вводите сериализованную текстовую строку в атрибут данных, а jQuery не преобразует ее в сериализованную строку. Во-вторых, вы назначаете объект атрибуту данных с атрибутом «order», имеющим сериализованную текстовую строку, поэтому jQuery в основном выполняет двойное кодирование. Чтобы он действовал так, как вам хотелось бы, вам необходимо преобразовать форму в объект и присвоить этому объекту свой атрибут порядка. Смотрите этот пост: Преобразование данных формы в объект JavaScript с помощью jQuery

// taking the example from the above link, you do this instead
order = $("#sitestructure-form"). serializeObject();
0

Другие решения

Исправлено следующим образом:

 $.ajax({
type: 'POST',
url: 'ajax-process.php?',
data: $("#sitestructure-form").serialize() + "&action=sitemap-reordernavigation",
success: function(d){$("#structureupdate").html(d);}
});
0

По вопросам рекламы [email protected]