заполнение массива JS определенными индексами

#javascript #jquery #ajax

#javascript #jquery #ajax

Вопрос:

Привет, это может показаться странным, но допустим, в настоящее время я делаю это:

  var post_data  = $('input[name="checks[]"]:checked').map(function() {
         return this.value;
        }).get();
  

чтобы получить содержимое нескольких флажков в массив для отправки через AJAX. Теперь, что я НА самом деле хочу сделать, это сконструировать post_data определенным образом.

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

итак, допустим, мои значения флажков были:

1,5,3,7

я хочу, чтобы post_data был сконструирован как:

post_data[1] = 1
post_data[5] = 5 и т.д.

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

ОБНОВЛЕНИЕ РЕДАКТИРОВАНИЯ: (прогресс кода)

 var post_data = $('input[name="checks[]"]:checked').serialize();

        alert(post_data);

        $.post('search_item.php', { 'checks[]':post_data,..
  

большое спасибо,

Комментарии:

1. Есть ли возможность, что вы могли бы просто отправить его как checks[]=1amp;checks[]=3amp;checks[]=5 и т.д. И просто обработать его в нужной вам форме на сервере? Это кажется более нормальным режимом работы.

Ответ №1:

Вы близки. value является строкой. Вам нужно число. Используйте parseInt() , чтобы превратить эту строку в число:

 post_data[parseInt(value)] = value;
  

Комментарии:

1. хорошо, итак, я внес это изменение, однако в настоящее время массив, похоже, не публикуется. :S спасибо, что помогли мне. обновлено кодом.

2. @buymypies Это звучит как новый вопрос. Пожалуйста, оставьте этот вопрос для одного вопроса, а не для постоянного справочного форума.

3. @buymypies Не беспокойтесь, просто рекомендую наилучший подход в соответствии с рекомендациями сайта, чтобы ваш вопрос (который сохранен для истории) потенциально мог наилучшим образом помочь другим пользователям.

Ответ №2:

вы должны инициализировать post_data как объект

 var post_data = {};
  

вот простой пример

Комментарии:

1. я не совсем понимаю, у меня вообще нет большого опыта в этом. ;(

Ответ №3:

Я хотел бы предложить решение с использованием HTML и serialize(). Если вы установите каждый флажок с номером массива в названии, то получите результат, который вы ищете.

 <input type="checkbox" name="checkbox[3]" value="3" class="retain_array_value_checkbox" />
<input type="checkbox" name="checkbox[5]" value="5" class="retain_array_value_checkbox" />
<input type="checkbox" name="checkbox[1]" value="1" class="retain_array_value_checkbox" />
  

Теперь JS:

 var post_data  = $('input.retain_array_value_checkbox:checked').serialize();
  

Я не могу это протестировать, но это должно сработать. Просто и понятно 🙂

Комментарии:

1. я раньше не использовал serialize, могу ли я использовать вот так: $.post('search_item.php', { 'data: serialized_data , .... ?

2. да, он передается с параметром data. [ api.jquery.com/jQuery.ajax /] в документации приводится несколько примеров.

3. в настоящее время post_data просто пуст. Я обновил свой код тем, что я пытаюсь.

4. Вам нужно будет использовать имя класса, чтобы получить все элементы :checked и заполнить атрибуты name соответствующим номером.