Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Обработка AJAX на стороне сервера
Форумы портала PHP.SU » » HTTP и PHP » Обработка AJAX на стороне сервера

Страниц (2): [1] 2 »
 

1. armancho7777777 - 14 Апреля, 2012 - 15:48:54 - перейти к сообщению
Всем привет!
Есть такая строка:

table_name=csv_export&unique_key=&csv_column[]=1&db_column[]=artikul&csv_column[]=2&db_column[]=product_name&csv_column[]=3&db_column[]=price

Эта строка - результат работы метода jquery serialize()

Как же её привести всё в нужный вид?
Ну, типа, $csv_column = $_POST['csv_column'][0]

Неужели перебором foreach и разбором по средством explode() ?

В "поиске" ответа так и не нашёл.
Всё только умничают объясняя как работает метод serialize(), но ни одного ответа по обработке результата работы этого метода.
2. DelphinPRO - 14 Апреля, 2012 - 15:55:29 - перейти к сообщению
если вы сериализуете форму, значит вы собрались каким-то образом отправить эти данные на сервер. либо аяксом (любым методом - GET POST) либо через url (GET)
CODE (javascript):
скопировать код в буфер обмена
  1. url = 'index.php?' + stroka;
  2. window.location = url;
На сервере все данные будут занесены в массив $_GET или $_POST соответственно

конкретно разбор csv_column - циклом.
но можно написать такие теги
CODE (html):
скопировать код в буфер обмена
  1. <input name="csv_column[1]" value="val_1" />
  2. <input name="csv_column[2]" value="val_2" />
тогда сериализованные данные будут в виде
CODE (text):
скопировать код в буфер обмена
  1. csv_column[1]=val_1&csv_column[2]=val_2
и обращаться на сервере можно будет по индексам
PHP:
скопировать код в буфер обмена
  1. echo $_POST['csv_column'][2]; // val_2
3. DeepVarvar - 14 Апреля, 2012 - 15:56:28 - перейти к сообщению
То что сериализовано, не должно быть в гет или пост переменной,
это должно быть само гет-строкой после знака вопроса, тогда на сервере все будет уже в суперглобах.
4. armancho7777777 - 14 Апреля, 2012 - 15:57:50 - перейти к сообщению
Я отправляю форму таким образом:
PHP:
скопировать код в буфер обмена
  1.  
  2. $.post('ajax_file.php', { data_form : $('#form).serialize(), }, function(data){ });
  3.  
5. DeepVarvar - 14 Апреля, 2012 - 16:00:57 - перейти к сообщению
А надо таким:
CODE (javascript):
скопировать код в буфер обмена
  1. $.get('ajax_file.php?' + $('#form).serialize(), function(data){ });

(Добавление)
Я вот где-то себе обработчик писал свой для формы, чтобы не сериализовать её, а отправлять нормально объектом.
Что-то щас с ходу найти не могу.
6. DelphinPRO - 14 Апреля, 2012 - 16:06:36 - перейти к сообщению
DeepVarvar пишет:
А надо таким:

а если textarea передается с большим текстом? у GET вроде ограничение есть на длину данных
7. armancho7777777 - 14 Апреля, 2012 - 16:07:59 - перейти к сообщению
DeepVarvar, найди пожалуйста)
Запросы на запись в БД не хочется делать GET-oм.

DelphinPRO пишет:
а если textarea передается с большим текстом? у GET вроде ограничение есть на длину данных

Вот именно.
8. DelphinPRO - 14 Апреля, 2012 - 16:11:51 - перейти к сообщению
CODE (javascript):
скопировать код в буфер обмена
  1. $.post('ajax_file.php', $('#form').serializeArray(), function(data){ });
?
9. armancho7777777 - 14 Апреля, 2012 - 16:13:23 - перейти к сообщению
Тогда ещё вопрос, что бы тему не создавать, спрошу тут:
как тоже самое на JS сделать:
PHP:
скопировать код в буфер обмена
  1.  
  2. foreach($array as $key => $val_array)
  3. {
  4.     $new_array[$val_array['name']][$key] = $val_array['value'];
  5. }
  6.  
10. DeepVarvar - 14 Апреля, 2012 - 16:22:33 - перейти к сообщению
Я не учитывал в этом решении что name может быть разным:
CODE (javascript):
скопировать код в буфер обмена
  1. var arr = [{"name":"a"},{"name":"b"},{"name":"c"},{"name":"d"}];
  2. var newArr = {};
  3. newArr.name = [];
  4. for (var i in arr) {
  5.   newArr.name[i] = arr[i].name;
  6. }
11. armancho7777777 - 14 Апреля, 2012 - 16:25:44 - перейти к сообщению
Спасибо DelphinPRO , всё работаетУлыбка
Я и не знал, что так можно Улыбка
Думал, только объектом надо {} Улыбка
12. DeepVarvar - 14 Апреля, 2012 - 16:27:38 - перейти к сообщению
А вот это уже кажется то что надо:
CODE (javascript):
скопировать код в буфер обмена
  1. var arr = [{"name":"a","value":22},{"name":"b","value":0},{"name":"c","value":6},{"name":"d","value":3}];
  2.  
  3. var newArr = {};
  4. for (var i in arr) {
  5.   newArr[arr[i].name] = [];
  6.   newArr[arr[i].name][i] = arr[i].value;
  7.   }
13. armancho7777777 - 14 Апреля, 2012 - 16:28:41 - перейти к сообщению
DeepVarvar пишет:
Я не учитывал в этом решении что name может быть разным:
CODE (javascript):
скопировать код в буфер обмена
  1. var arr = [{"name":"a"},{"name":"b"},{"name":"c"},{"name":"d"}];
  2. var newArr = {};
  3. newArr.name = [];
  4. for (var i in arr) {
  5.   newArr.name[i] = arr[i].name;
  6. }

Вот именно, что разное )

Вот код:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var form_data = {};
  3.                            
  4. $('#form').find('input:text, select').each(function(index, element) {
  5.                
  6.        form_data[this.name] = this.value;
  7.                                    
  8. });
  9.  


Но так одномерный массив получается.
И списков с одим именем несколько: т.е. массив.
14. DelphinPRO - 14 Апреля, 2012 - 16:34:21 - перейти к сообщению
armancho7777777 пишет:
Думал, только объектом надо {}

в javascript граница между понятиями "массив" и "объект" довольно расплывчатая.
по сути объект - это ассоциативный массив.
15. armancho7777777 - 14 Апреля, 2012 - 16:36:54 - перейти к сообщению
DelphinPRO пишет:
в javascript граница между понятиями "массив" и "объект" довольно расплывчатая.
по сути объект - это ассоциативный массив.

Ну это я знаю)
Я имел ввиду ajax функцию $.post библиотеки jQuery)

CODE (javascript):
скопировать код в буфер обмена
  1. $.post('ajax_file.php', { data_form : $('#form).serialize() }, ....

 

Powered by ExBB FM 1.0 RC1