Как правильно составить AJAX запрос с serialize?

Здравствуйте, делаю фильтр для инет магазина, это мой первый опыт. Расклад такой, в div'ах с классами .sended-param содержаться radio кнопки. По клику на div с этим классом отправляется запрос и радио кнопки внутри него становятся checked и данные собираются с помощью serialize() и отправляются. Проблема в следующем:
Вот допустим есть у меня Керамическая плитка и Керамогранитная, жму я на керамическую отправляется type=1 все верно и я его получаю и вижу во вкладке Network в консоли, дальше жму керамогранитную тоже все ок отправляется type=2, но если опять нажму на керамическую или на керамогранитную, то уже пустота.
Вот код:
$(".sended-param").click(function(){
	$(".sended-param").find("input[type=radio]").attr('checked', false);
	$(this).find("input[type=radio]").attr('checked', true);
	$.ajax({
		type: "post",
		url: "/filter",
		data: $(".filter form").serialize(),
		success: function(data) {
            console.log("Hello world!");
        }
	});
});
  • Вопрос задан
  • 3113 просмотров
Решения вопроса 1
@Yago
Попробуйте вместо attr использовать prop:

$(".sended-param").click(function(){
	$(".sended-param").find("input[type=radio]").prop('checked', false);
	$(this).find("input[type=radio]").prop('checked', true);
	$.ajax({
		type: "post",
		url: "/filter",
		data: $(".filter form").serialize(),
		success: function(data) {
            console.log("Hello world!");
        }
	});
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Напомню, код:

$(".sended-param").click(function(){
	$(".sended-param").find("input[type=radio]").attr('checked', false);
	$(this).find("input[type=radio]").attr('checked', true);
	$.ajax({
		type: "post",
		url: "/filter",
		data: $(".filter form").serialize(),
		success: function(data) {
            console.log("Hello world!");
        }
	});
});


Разберем:
$(".sended-param").find("input[type=radio]").attr('checked', false);

Зачем? нашли радио, поставили свойство checked в false.

$(this).find("input[type=radio]").attr('checked', true);

Зачем? Нашли радио в $(this) (что есть элемент с классом .sended-param, то есть тоже самое, что и первая строка), поставили свойство checked в true.

И как это понимать?

А по поводу serialize():
Encode a set of form elements as a string for submission.

Ключевое слово Form. То есть мы можем применить serialize функцию только к форме.
Ваш код:
$.ajax({
		type: "post",
		url: "/filter",
		data: $(".filter form").serialize(),
		success: function(data) {
            console.log("Hello world!");
        }

показывает, что применяете вы данные к форме, но что эта за форма не понятно.

Вывод:
Разберитесь, что хотите сделать первыми двумя строками.
Отредактируйте пост и добавьте нужный HTML код. Где форма, где радио баттоны и т.п.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы