2016-08-13 5 views
1

У меня есть форма, которая содержит поле ассоциативного массива:Отправить форму с ассоциативным массивом с помощью AJAX для PHP

<label for="my_array[][system]">System</label> 
<input id="my_array[][system]" type="text" value="" name="my_array[0][system]"> 

<label for="my_array[][name]">Name</label> 
<input id="my_array[][name]" type="text" value="" name="my_array[0][name]"> 

Я пытаюсь получить эту форму размещенной на PHP с использованием Ajax. Я попытался это:

$.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: ajaxurl, 
    data: { 
     action: "update_postmeta", 
     post_id: post_id, 
     nonce: nonce, 
     my_array: $('input:text[name="my_array*"]') 
      .each(function() { values[this.name] = $(this).val() }) 
     }, 
    success: function (response) { 
     alert(response); 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
     alert("Error: " + textStatus + '\r\n\r\n' + errorThrown); 
    } 
}) 

Проблема заключается в этой строке кода:

my_array: $('input:text[name="my_array*"]') 
    .each(function() { values[this.name] = $(this).val() }) 

.each() не является функцией ... Я не уверен, как получить my_array заселена с данными формы в той же структуре он будет использовать регулярное представление формы (без Ajax).

Как отправить данные формы, когда она создана с помощью ассоциативного массива?

+1

Опубликовать как объект JavaScript –

+0

Ваш вопрос еще не совсем ясен. '$ .fn.each()' является функцией, и она должна работать для заполнения массива. Вы говорите, что '.each()' не работает, или что вы не можете отправлять массив как данные через '. $ .ajax()'? –

+0

@ Nostalg.io Я думаю, что проблема в моем селекторе - правильно ли используется звездочка для выбора полей формы ассоциативного массива? Так как селектор не работает .each() недействителен, я думаю? : S – rwkiii

ответ

1

Изменение функции my_array() для автоматического вызова функции и возвращает массив ключ: значение объектов:

{ 
    ..., 
    my_array: (function() { 
     var my_array = []; 
     $('input:text[name="my_array*"]') 
      .each(function() { 
       my_obj = {}; 
       my_obj[this.name] = $(this).val(); 
       my_array.push(my_obj); 
      }); 
     return my_array; 
    })() 
} 

Кроме того, вам может понадобиться использовать синтаксис attributeStartsWith селектор:

jQuery("[attribute^='value']")

Для полноты здесь приведен пример использования объекта вместо массива для непосредственного управления парами key: value для my_array. Кроме того, я использую синтаксис startsWith.

{ 
    ..., 
    my_array: (function() { 
     var my_array = {}; 
     $('input:text[name^="my_array"]') 
      .each(function() { 
       // Directly sets the key/value data in the POST. 
       // You could modify the key names if desired. 
       my_array[this.name] = $(this).val(); 
      }); 
     return my_array; 
    })() 
} 
+0

Хорошо, это работает на меня. Мои POST данные для этой страницы, с некоторыми тестовыми переменными вышли: 'действия: update_postmeta POST_ID: 7 нонса: asdfsdf my_array [0] []: my_array [1] [д]: my_array [2] [ автор]: 'Конечно ... В поля ввода не было данных, поэтому они пусты. –

+0

@ Nostaig.io AJAX POST успешно завершен. Все мои другие формы хранятся в $ _POST, но my_array не равен нулю. Нет ошибки. Я собираюсь сделать некоторые трассировки здесь. – rwkiii

+0

Отображаются ли данные в сообщении POST? –

Смежные вопросы