- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте.
Пишу AJAX метод отправки форм. Написал говнокодом, но теперь задача сделать все в стиле ООП.
Итак, например, есть стандартная форма:
<form>
<input name="name1">
<input name="name2">
</form>
Мне нужно с помощью JS, универсально(!) подготовить массив вида arr[input.attr("name")] = input.val();
Т.е., чтобы на выходе получился [name1 = "то что записано в первом поле", name2 = "...во втором"].
С помощью $.map() выходит добавить в массив только что-то одно (либо значения, либо именно), но никак не ассоциативный массив. Пока что единственное решение создавать JSON строку, а потом искусственно ее распарсить в массив с помощью метода $.ParseJSON();, но это не совсем правильно и не совсем красиво.
Помогите :) .
А к каким объектам можно применять serialize? А то у меня 1 форма на все. А отсылать нужно участки. Наверное стоит делать для каждой группы инпутов отдельную форму?
И еще data: (data) не отсылается. Сам пробовал такую конструкцию, но отсылается только в случае data: {data: data}. Какие могут быть причины?
биндим на форму что то вроде этого:
100% рабочее решение...
А к каким объектам можно применять serialize? А то у меня 1 форма на все. А отсылать нужно участки. Наверное стоит делать для каждой группы инпутов отдельную форму?
да просто назначь форме id
И сериалайз заберет все значения которые есть в форме (инпуты, селекты и тд)
И еще data: (data) не отсылается. Сам пробовал такую конструкцию, но отсылается только в случае data: {data: data}. Какие могут быть причины?
Если забрать сериалайзом - отправится. Сериалайз сам формирует ({data:value, data2:value2}) - из значений формы
... Сериалайз сам формирует ({data:value, data2:value2}) - из значений формы
??? http://api.jquery.com/serialize/ :
??? http://api.jquery.com/serialize/ :
Я знаю, как сериалайз формирует данные. Я для ТС расписал так, что бы было немного понятнее ему. Если его счас нагрузить еще и формирование и склеиванием данных -боюсь он ничего не поймет.
сериалайз
и простой набор руками
На сервере приводит к одному и тому же эффекту
Фактически для этого (что бы в ручную колеса не делать) сериалайз и существует.
А
означает, что она безопасна для передачи как гет так и пост запросов
Я знаю, как сериалайз формирует данные. Я для ТС расписал так, что бы было немного понятнее ему. Если его счас нагрузить еще и формирование и склеиванием данных -боюсь он ничего не поймет.
что мешало писать не о $.serialize(), а о $.serializeArray() :
и не вводить ТС в заблуждение ?
Спасибо, уже решил так:
$("#" + window.page).submit(function(event) {
//Встановлюємо action
window[action] = {"action": action};
//Парсимо значення всіх input, textarea, select
$(this).find("input[type=text]").each(function(){
window[action][this.name]=this.value;
});
//Встановлюємо перший знайдений id элемента, що редагуємо, якщо є
(id = $(this).find("input.id:first").attr("name")) ? window[action].id = id : "" ;
$.ajax({
data: (window[action]),
success: function(result) {
$("tr:has(input[name=" + window.edit.id + "])").children("td:not(:has(input[type=checkbox]))").each(function() {
if ($(this).children("input").attr("name") == 'drug') {
$(this).replaceWith('<td class="' + $(this).children("input").attr("name") + '"><a href="/index.php?major=health&minor=drugs&drug=' + result['id'] + '">' + result[$(this).children("input").attr("name")] + '</a>');
}
else {
$(this).replaceWith('<td class="' + $(this).children("input").attr("name") + '">' + result[$(this).children("input").attr("name")]);
}
});
//Видаляємо діалогове вікно
$(".dialog-right." + (id ? id : action)).remove();
$("button[value=" + action + "]" + (id ? "[id=" + id + "]" : "")).unbind();
}
});
});
Serialize не подошел по двум причинам: 1. одна форма, а внутри таблица (т.е. к tbody форму уже не добавить), 2. нужно проверять значения input перед отправкой.
что мешало писать не о $.serialize(), а о $.serializeArray() :
и не вводить ТС в заблуждение явной ошибкой в коде?
Ну вот и зачем ТС на сервере json расспарсивать еще, не хватит $_POST массива?
ПС - в коде никакой ошибки, использую постоянно, никаких ошибок.
bay_ebook, да, ваш вариант тоже работает. У меня просто обработчик искал обязательное ключ action в массиве, а его serialize не спарсил из value кнопки.