.serialize() пашет, а .serializeArray() нет... почему?

djdiplomat
На сайте с 05.08.2009
Offline
136
2535

Почему то .serialize() пашет, а .serializeArray() не пашет. Понять не могу почему...

В логах:

"tel_1001=11&text_1002=22&text_1003=33&textarea_1004=44" send.js:4:0

Array [ Object, Object, Object, Object ]

код формы

<form id='acf_1000'>

<input type="tel" name="tel_1001" class="tel" placeholder="Введите телефон (8 знаков)" maxlength="8">

<input type="text" name="text_1002" class="text" placeholder="Ваше имя" required>

<input type="text" name="text_1003" class="text" placeholder="Ваша фамилия" >

<textarea name="textarea_1004" class="textarea" value="Дефолтный текст" cols="30" rows="10"></textarea>

<input type="submit">

</form>'

скрипт

$("form[id^=acf]").submit(function(e){ //клик по кнопке отправки формы


console.log($(this).serialize());
console.log($(this).serializeArray());
...
}
siv1987
На сайте с 02.04.2009
Offline
427
#1

http://api.jquery.com/serializearray/

Вы плохо читаете, поэтому у вас и не "работает".

The .serializeArray() method creates a JavaScript array of objects, ready to be encoded as a JSON string.
djdiplomat
На сайте с 05.08.2009
Offline
136
#2
siv1987:
http://api.jquery.com/serializearray/
Вы плохо читаете, поэтому у вас и не "работает".

Говоря по русски:

Метод .serializeArray() возвращает массив объектов JavaScropt, который можно передовать в формате JSON. Данные могут собираться с многих объектов jQuery

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

[ { name: "a",

value: "1"

},

{

name: "b",

value: "2"

},

{

name: "c",

value: "3"

},

{

name: "d",

value: "4"

},

{

name: "e",

value: "5"

}

]

, а не то, что у меня. Или я не прав?

Мне как раз такую строку получить и нужно.

Но чет под вордпресом даже дефолтный пример из ссылки не хочет мне выдавать то, что нужно...

siv1987
На сайте с 02.04.2009
Offline
427
#3

У вас и есть массив объектов

Array [ Object, Object, Object, Object ]
djdiplomat
На сайте с 05.08.2009
Offline
136
#4
siv1987:
У вас и есть массив объектов

да, но там какая то хрень. Смотрю логи.

Выбрал один из объектов. Нажал. Но там почему то ВСЕГДА значение value дефолтное, не то, что я только что ввел в форму... вот в чем проблема.

Т.е. к пример создал текстовый инпут. по умолчанию value="дефолт"

Ввел в поле слово "тест" и нажал отправить.

В результате у меня

{

name: "a",

value: "дефолт"

}, хотя по моему разумению должно быть

{

name: "a",

value: "тест"

}

вот и воюю с этой хренью уже второй день((

А вообще суть всей затеи в чем.

Создать обработчик, который бы взаимодействовал с формами при произвольном количестве полей в форме.

Т.е. во всех примерах по аяксу там дана форма к примеру с 3-я инпутами, и в самом аякс коде данные передаются

jQuery.ajax({

type : "post",

dataType : "json",

url : wlAjax.ajaxurl,

data : {

name : name,
contact : contact,
city : city

},

т.е. пары имя-значение прописаны сразу.

Мне же нужно, чтобы работало хоть с 1-м полем, хоть с 50-ю полями.

И при этом name полей также не известны заранее.

lutskboy
На сайте с 22.11.2013
Offline
133
#5

В поле name вам нужно прописать массив

например

name="name[]"

или же

name="name[0]"

name="name[1]"

...

name="name[n]"

siv1987
На сайте с 02.04.2009
Offline
427
#6
djdiplomat:
Но там почему то ВСЕГДА значение value дефолтное, не то, что я только что ввел в форму... вот в чем проблема.

https://jsfiddle.net/sbcemzay/ я вижу что все работает, и никаких проблем с дефолтным значением нету.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий