Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   $.post + много масивов (https://javascript.ru/forum/jquery/10438-%24-post-mnogo-masivov.html)

korner 05.07.2010 11:18

$.post + много масивов
 
Столкнулся с вот такой проблемой, нужна через $.post отправить много массивов, но не знаю как это сделать.

Например у меня есть вот такой html.
<input type=text  name="save_con[home_title]" value="$config['home_title']">
<input type=text  name="save_con[url]" value="$config['url']">
<input type=text  name="save_con[title]" value="$config['title']">
...


Ну вот и собственно и проблема, в нете нашол как отправить отдельные значение.
$.post(action, {'foo' : $('#test').val()},function(data){ ... });


Вопрос как отправить массив с данными если у меня таких input более 30 и больше?

Обработчик test.php должен получить массив name=>value.

exec 05.07.2010 13:19

Засунуть все инпуты в форму и напустить на неё jQ.serialize()

korner 05.07.2010 13:28

Цитата:

Сообщение от exec (Сообщение 62264)
Засунуть все инпуты в форму и напустить на неё jQ.serialize()

Не был бы джин так любезен и сказать что это такое и как оно работает.

e1f 05.07.2010 16:08

Цитата:

Сообщение от exec (Сообщение 62264)
Засунуть все инпуты в форму и напустить на неё jQ.serialize()

Цитата:

Сообщение от korner (Сообщение 62270)
Не был бы джин так любезен и сказать что это такое и как оно работает.

Форма не нужна, $('input.some-general-class').serialize() выдаст строку сериализированных параметров. $('input.some-general-class').serializeArray() выдаст массив из пар ключ-значение для каждого инпута.

korner 05.07.2010 17:04

Цитата:

Сообщение от e1f (Сообщение 62280)
Форма не нужна, $('input.some-general-class').serialize() выдаст строку сериализированных параметров. $('input.some-general-class').serializeArray() выдаст массив из пар ключ-значение для каждого инпута.

Попробывал serializeArray() через alert()
var result = $('input').serializeArray();
alert(result);
   $.post("engine/jquery/save.php",{name:'value'},function(data){..}


но он выдал мне что то такое.
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]


Я не понял что эта такое и как отправить через $.post
И serialize( ) тоже не понятно как пихнуть в $.post

korner 05.07.2010 17:17

Все тема закрыта!
все дела с кобках каторые нужна убрать
var result = $('input').serializeArray();
   $.post("engine/jquery/save.php",{result},function(data){

В место ,{result}, нужна писать ,result,

dr83 17.09.2011 00:43

не получается так... или все дело в формате json?

$(document).ready(function(){
$('#update').click(function(){
var fields = $(":input").serializearray();
$.post('select10.php', {action: 'update', fields, function(data){
},'json');
});
});

не работает(
прошу совета...
как реализовать отправку всех данных формы методом $.post и получить автоматом все пары в php обработчике?
$input=unserialize($_POST['fields']);
$input=json_decode($_POST['fields']);

все перепробовал( перечитал - но уже каша в голове... нид хелп

korner 17.09.2011 10:01

serializearray() Собирает в виде массива.
У вас не правильно составлен код, попробуйте так:
$.post('select10.php?action=update', fields, function(data){

},'json');

dr83 18.09.2011 23:07

спасибо, что ответили... а дальше? как вы в php "распаковываете" этот массив? буду крайне признателен если хотя бы по двум переменным пример покажете

melky 18.09.2011 23:32

по-моему, если переменная передана так :
Цитата:

lol.php?arr[]=1&arr[]=2&arr[]=3
то в пхп можно будет взять этот массив (не строку. массив) так.
$arr = $_GET["arr"];


если мне память не изменяет :)

dr83 19.09.2011 08:00

только почему get если передается $.post?
уважаемый korner, у вас скрипт заработал... если можно первые строки php

melky 19.09.2011 09:07

или post, какая разница

*надо было написать request

dr83 19.09.2011 10:06

с Request получается, но это надо прописывать 50-60 Requestov для каждого из полей формы...
ну может я и правда тупой, но сколько форумов и документации не прочитайл, я так и не понял...

1) var fields = .. serialize (или serializeArray) (); (упаковываем пары значений поле - значение)
2) $.post (обработчик, fields, function (data) ... передаем эти значения в обработчик
3) как распаковать эти данные? был бы признателен, если у кого есть под рукой ссылка на пример...
причем распаковать "автоматом"...
чтоб получить в переменную с именем поля значения - без многочисленных
$id = $_POST['id'];
$nomer = $_POST ['nomer']
у меня в форме может быть до 60 заполненных полей

korner 20.09.2011 18:33

Да, понимаю, я тоже раньше думал как это сделать.
Мне нужно было сохранять настройки движка, там тоже было от 1 поля до бесконечности.

Есть два варианта сбора данных.
Первый самый простой, это сделать функцией extract($_POST);
Она переводит все что было передано через пост запрос в переменные с названием.

То есть если у вас на станицы пишется на подобие так.
<input type="text" name="id" />
<input type="text" name="nomer" />

То в php функция extract($_POST) вернет в переменные и обратится можно будет к ним так:
extract($_POST);
print $id; //input name="id"
print $nomer;//nput name="nomer"


Есть второй способ пожалуй самый разумный.
Это собирать данный всего с одним массивом.
На станицы должно быть написано так:
<input type="text" name="save[id]" />
<input type="text" name="save[nomer]" />

Как видно в name я добавил в массив save.
В php мы получим только одну переменную $_POST['save'], к которому можно обратится так;
$save = $_POST['save'];
print $save['id']; //input name="save[id]"
print $save['nomer'];//nput name="save[nomer]"


Вроде объяснил но на всякий дам пример.
Код HTML index.html;
<script>
function get_post_go(){
var fields = $('input').serializeArray();
$.post('save.php?action=update', fields, function(data){
    alert(data.id); // id
    alert(data.nomer); //  nomer

},'json');
}
</script>


<input type="text" name="save[id]" />
<input type="text" name="save[nomer]" />

<input type="submit" value="Отправить" onclick="get_post_go()" />

Код PHP save.php;
<?php 

$save = $_POST['save']; // Получаем результат также можно обработать циклом foreach

//Обробатываем данные
//$save['id'] //массив id
//$save['nomer'] //массив nomer

//Выводим результат в формате json
echo json_encode(array("id"=>$save['id'],"nomer"=>$save['nomer'])); 

?>


Часовой пояс GMT +3, время: 10:00.