“Склеить” данные в AJAX data

284
17 февраля 2017, 03:53

Всем доброго времени суток! Появился следующий вопрос: Есть ajax-запрос:

$("#first_form").submit(function() {
    $.ajax({
        type: "POST",
        url: "rest.php",
        data: $(this).serialize()
    }).done(function() {
        alert("Спасибо за заявку!");
    });
    return false;
});

Как сделать, чтобы в параметре data передать еще несколько параметров? Мне нужно, чтобы туда передавались, к примеру, переменные first и second, а в php файл данные в итоге поступали в массиве $_POST, т.е. $_POST['first'] и $_POST['second']?

Заранее спасибо!)

Answer 1

$(this).serialize() возвращает вам form-urlencoded строку вида:

param1=val&param2=val2

На сервере, это благополучно парсится в массив $_POST.

В jQuery есть функция $.param, которая превращает js-объект в такую строку.

Ничто не мешает вам через '&' добавить нужные вам данные:

$("#first_form").submit(function() {
    $.ajax({
        type: "POST",
        url: "rest.php",
        data: [$(this).serialize(), $.param({second: 222})].join('&')
    }).done(function() {
        alert("Спасибо за заявку!");
    });
    return false;
});
Answer 2

Использовать для этого JSON формат:

$("#first_form").submit(function() {
    $.ajax({
        type: "POST",
        url: "rest.php",
        data: { first: $(this).serialize(), second: 'blah' }
    }).done(function() {
        alert("Спасибо за заявку!");
    });
    return false;
});
Answer 3

Не профи в jquery, но я обычно для POST-запроса использую

$.post('test.php', {first:'Ivan',second:'Petrov'}).done(function(result) {
    alert(result);
});
READ ALSO
Не срабатывает on('click') в хроме

Не срабатывает on('click') в хроме

Я понимаю вопрос избитыйНо четкого ответа не нашел

333
jQuery ajax tabs

jQuery ajax tabs

Здравствуйте

360
Setup webpack sass-loader to separate styles [требует правки]

Setup webpack sass-loader to separate styles [требует правки]

In my app I have such folder structure for styles

310