Доступ к данным массива $_POST с помощью jQuery .val()?

#jquery

#jquery

Вопрос:

Я использую плагин jQuery (tag-it), который генерирует поле ввода формы:

 function create_choice (value){
            var el = "";
            el  = "<li class="tagit-choice">n";
            el  = value   "n";
            el  = "<a class="closetag">x</a>n";
            el  = "<input type="hidden" style="display:none;" value="" value "" name="item[tags][]">n";
            el  = "</li>n";
            var li_search_tags = this.tag_input.parent();
            $(el).insertBefore (li_search_tags);
            this.tag_input.val("");
        }
  

К полю ввода, сгенерированному вышеупомянутой функцией, можно получить доступ в HTML-форме следующим образом:

 <ul id="mytags"></ul>
  

Я могу получить доступ к массиву тегов, отправив форму с помощью PHP, например:

 $tags = $_POST['item']['tags'];
  

Могу ли я получить приведенный выше массив без $ _POST, используя jQuery .val() или какой-либо другой метод? Спасибо.

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

1. Вы спрашиваете, можете ли вы использовать jQuery в PHP-коде на стороне сервера?

2. @Norman H: Я просто хочу опубликовать эти данные массива с помощью плагина uploadify, который в основном принимает входные данные формы с .val()

3. Итак, ваш вопрос на самом деле не имеет ничего общего с PHP $_POST … вы просто хотите получить значение или состояние различных скрытых <input /> полей. Да?

4. @Tomalak Geret’kal Извините, если мой вопрос неясен. Я хочу ОПУБЛИКОВАТЬ данные формы с помощью скрипта uploadify, который получает значения полей формы, подобные $('#name').val() . Но я использую этот плагин тегов, который имеет скрытый ввод, поэтому мне трудно восстановить скрытое значение и опубликовать в uploadify. Я буду очень благодарен, если вы сможете помочь с этим.

5. hidden поля по-прежнему являются частью формы. Если плагин не включает их значения в POST запрос, значит, в нем ошибка. Вам следует связаться с авторами. (Кстати, я не знаю, зачем вы принудительно display: none используете CSS; type="hidden" входные данные уже невидимы).

Ответ №1:

 var elems = $('input[name="item[tags][]"]');
var array = new Array();
for (var i = 0; i < elems.length; i  ) {
   array.push($(elems[i]).val());
}
  

Ответ №2:

Для извлечения тегов на клиенте вы можете выполнить:

 var tags = [];
$('li.tagit-choice > input[type=hidden]').each( function() {
    tags.push( $(this).val() );
});
  

Или, если — как вы прокомментировали — вам просто нужно сериализовать значения из формы.

 $('form').serialize();
  

тоже работает.

Ответ №3:

serializeArray(), похоже, предназначен для того, что вы хотите сделать.

http://api.jquery.com/serializeArray/

РЕДАКТИРОВАТЬ: Хорошо, вы можете использовать serializeArray(), но требуется немного больше кода:

 $.map($('#test').serializeArray(), function (n) {
  if (n.name == 'item[tags][]') {
    return n.value;
  }
});
  

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

1. serializeArray не получит значения элементов. Это просто поместит объекты в массив.