Как использовать вложенные HTML как JavaScript Ключи объекта / массива - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь подготовить следующие входные данные

<input type="text" name="customer[firstname]">
<input type="text" name="customer[surename]">
<input type="text" name="customer[cuid]">

, чтобы использовать их в функции ajax для проверки их с помощью PHP. Массив, который я получу, будет выглядеть как $data['customer']['firstname'].

Это была моя первая попытка

$.each($('input[name^="customer"]').serializeArray(), function() {
    data[this.name] = this.value;
});

Проблема: массив в запросе выглядит как $data["[customer[firstname]"], и это не красиво и У меня будут разные ключи, такие как product [...], order [...]. Тогда мне понадобится «клиент» в качестве отдельного ключа.

Затем я подумал снять и заменить скобки и просто создать свой собственный массив перед отправкой. Но есть больше проблем, чем я думал ...

var data = {};

$.each($('input[name^="customer"]').serializeArray(), function() {
    let name = this.name.replace( ']', '' ).replace( '[', ',' ).split(',')[1];
    data['customer'].push({[name] : this.value}); // <- Error: push is not a function
    data = { 'customer' : {[name] : this.value} }; // <- Problem: data gets overwritten with the next key:value
    data['customer'][name] = this.value; // <- Error: `customer` not defined
});

Эти 3 примера - всего лишь несколько, которые я пробовал ...

Кто-нибудь знает, как решить эту проблему?

1 Ответ

1 голос
/ 16 января 2020

Теперь все будет работать нормально. Пожалуйста, проверьте это.

var data = { customer: [] }; 
$.each($('input[name^="customer"]').serializeArray(), function() {
     var new_name = this.name.replace("customer[", "");
         new_name = new_name.replace("]", "");
         data['customer'].push(new_name);
         data['customer'][new_name] = this.value;
  });
...