Отправка массива с Ajax для бэкэнда вложит слишком много массивов - PullRequest
0 голосов
/ 14 апреля 2020

Я создаю интерфейс отправки электронной почты, в который вы можете добавить столько получателей, сколько захотите. В форме есть кнопка для добавления новых пар текстовых полей (имя и адрес электронной почты). умножение JQuery выглядит так:

var wrapper = $(".input_fields_wrap"); //Fields wrapper
var add_button = $(".add_field_button"); //Add button ID

var x = 0; //initial text box number
$(add_button).click(function (e) { //on add input button click
    e.preventDefault();
        x++; //text box increment
        $(wrapper).append(
            '<div class="form-group row multiplied">\n' +
            '    <label for="recipient_name_' + x + '" class="col-sm-1 col-form-label">Name</label>\n' +
            '        <div class="recipient_name">\n' +
            '            <input class="form-control" type="text" name="recipient_name" id="recipient_name_' + x + '">\n' +
            '        </div>\n' +
            '        <label for="recipient_email_' + x + '" class="col-sm-1 col-form-label">E-mail</label>\n' +
            '        <div class="recipient_email">\n' +
            '            <input class="form-control" type="text" name="recipient_email" id="recipient_email_' + x + '">\n' +
            '        </div>
                        <a href="#" class="ml-2 btn btn-danger remove_field">
                            <i class="fas fa-trash" aria-hidden="true"></i>
                        </a>
                    </div>'
        ); //add input box
});

$(wrapper).on("click", ".remove_field", function (e) { //user click on remove text
    e.preventDefault();
    $(this).parent('div').remove();
});

После отправки формы я отправляю данные в бэкэнд через ajax запрос. Запрос работает нормально, я отправляю данные умноженных полей следующим образом:

data: {
        sender_name : $("#sender_name").val(),
        sender_email : $("#sender_email").val(),
        subject : $("#subject").val(),
        email_content: $("#email_content").val(),
        recipient_name : $('input[name="recipient_name"]').serializeArray(),
        recipient_email : $('input[name="recipient_email"]').serializeArray(),
        },

`

Я запускаю его, и он попадает в бэкэнд, я могу быть счастлив, что он работает, но имя-получателя и Переменные receient_email - это массивы, которые содержат как значение, так и имя элемента. в следующем виде:

array:2 [
  0 => array:2 [
    "name" => "recipient_name"
    "value" => "John Doe"
  ]
  1 => array:2 [
    "name" => "recipient_name"
    "value" => "Jane Doe"
  ]
]

Но я бы предпочел что-то вроде

array:2 [
  0 => "John Doe"
  1 => "Jane Doe"
]

Другими словами:

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

request('recipient_name')[$key]['value'];

И я хочу это как

request('recipient_name')[$key];

К сожалению, я только учусь ajax звонкам, и я немного застрял в этой проблеме, полагая, что есть лучшее Решение, только я не могу найти его. Заранее спасибо за любую помощь!

1 Ответ

1 голос
/ 14 апреля 2020

Вот как данные «распаковываются», вы можете предварительно обработать их в PHP, если хотите:

$myValues = array_map(function($val) { return $val['value']; }, request('recipient_name');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...