С Новым годом! Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
21 / 21 / 16
Регистрация: 30.09.2013
Сообщений: 262

Представить serialize() в JSON

22.11.2015, 02:14. Показов 2580. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код:
JavaScript
1
2
3
4
5
6
7
8
9
10
$.ajax({
    type: 'POST',
    url: '/api/index.php',
    data: $('#{$field_nam}').serialize(),
    dataType: 'json',
    success: function(data) {
    },
    error: function (xhr, ajaxOptions, thrownError) {
    }
});
$('#{$field_nam}').serialize() - получает строку вида GET запроса в PHP: do=postthread&f=225
Проблема в том что это не JSON формат, запрос не может выполнится. Если вместо этого значения написать что то вроде: {'value':'45'}, то всё начинает работать.

Подскажите, как на лету эту строку перевести в JSON формат? Проворачивал множество вариантов, придумал несколько костылей, но их бы хотелось избежать. Можно написать: $('input[name={$field_name}]').val() , но этот вариант мне не подойдет в силу того что он не может отправить массив (select.multiply например)

Не по теме:

Сейчас как всегда создам тему и тут же найду решение :D, хотя очень сомневаюсь



Вот тут кстати есть аналогичный пример, я не проверял его, но так как тут написано - у меня не работает
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.11.2015, 02:14
Ответы с готовыми решениями:

Serialize json
Всем привет,возникла проблема при парсинге json public class SmoList { public List<Category> Category{get;set;} ...

ValueError: Cannot serialize: <Publisher: Publisher object> There are some values Django cannot serialize into migration
Эта ошибка выводится при запуске команды makemigrations. Не понимаю, в чём причина. Вот мой класс Publisher: class...

Ошибка при обработке Json - Cannot deserialize the current JSON array because the type requires a JSON object
Всем привет! Помогите, плиз, разобраться с ошибкой: An unhandled exception of type 'Newtonsoft.Json.JsonSerializationException'...

4
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
22.11.2015, 03:19
$('#{$field_nam}') скобки лишние
0
 Аватар для o90990
8 / 8 / 7
Регистрация: 19.02.2012
Сообщений: 76
22.11.2015, 10:37
Лучший ответ Сообщение было отмечено -MaZaHaKa- как решение

Решение

отправляй через formData.. прекрасно на сервере данные собираються

есть еще пару вариантов:


HTML5
1
2
3
4
5
6
7
<input name="honey[badger]" value="a">
<input name="wombat[]" value="b">
<input name="hello[panda][]" value="c">
<input name="animals[0][name]" value="d">
<input name="animals[0][breed]" value="e">
<input name="crazy[1][][wonky]" value="f">
<input name="dream[as][vividly][as][you][can]" value="g">

Как можно собрать данные:

JavaScript
1
$('#my-form').serializeObject();
что в итоге получим

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
  "honey":{
    "badger":"a"
  },
  "wombat":["b"],
  "hello":{
    "panda":["c"]
  },
  "animals":[
    {
      "name":"d",
      "breed":"e"
    }
  ],
  "crazy":[
    null,
    [
      {"wonky":"f"}
    ]
  ],
  "dream":{
    "as":{
      "vividly":{
        "as":{
          "you":{
            "can":"g"
          }
        }
      }
    }
  }
}
Сама функция:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
(function($){
    $.fn.serializeObject = function(){
 
        var self = this,
            json = {},
            push_counters = {},
            patterns = {
                "validate": /^[a-zA-Z][a-zA-Z0-9_]*(?:\[(?:\d*|[a-zA-Z0-9_]+)\])*$/,
                "key":      /[a-zA-Z0-9_]+|(?=\[\])/g,
                "push":     /^$/,
                "fixed":    /^\d+$/,
                "named":    /^[a-zA-Z0-9_]+$/
            };
 
 
        this.build = function(base, key, value){
            base[key] = value;
            return base;
        };
 
        this.push_counter = function(key){
            if(push_counters[key] === undefined){
                push_counters[key] = 0;
            }
            return push_counters[key]++;
        };
 
        $.each($(this).serializeArray(), function(){
 
            // skip invalid keys
            if(!patterns.validate.test(this.name)){
                return;
            }
 
            var k,
                keys = this.name.match(patterns.key),
                merge = this.value,
                reverse_key = this.name;
 
            while((k = keys.pop()) !== undefined){
 
                // adjust reverse_key
                reverse_key = reverse_key.replace(new RegExp("\\[" + k + "\\]$"), '');
 
                // push
                if(k.match(patterns.push)){
                    merge = self.build([], self.push_counter(reverse_key), merge);
                }
 
                // fixed
                else if(k.match(patterns.fixed)){
                    merge = self.build([], k, merge);
                }
 
                // named
                else if(k.match(patterns.named)){
                    merge = self.build({}, k, merge);
                }
            }
 
            json = $.extend(true, json, merge);
        });
 
        return json;
    };
})(jQuery);
еще один простой способ №2

JavaScript
1
2
var data = {};
$(".form-selector").serializeArray().map(function(x){data[x.name] = x.value;});
1
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
22.11.2015, 11:55
Цитата Сообщение от -MaZaHaKa- Посмотреть сообщение
получает строку вида GET запроса в PHP: do=postthread&f=225
Такая строка, на стороне сервера обрабатывается PHP-функцией parse_str():
PHP
1
2
3
4
<?php
$str = 'do=postthread&f=225';
parse_str($str, $data);
var_dump($data);
Результат:
PHP
1
2
3
4
5
6
array(2) {
  ["do"]=>
  string(10) "postthread"
  ["f"]=>
  string(3) "225"
}
И кстати, JSON тут абсолютно ни при чем. Объект передается на сервер в виде url-кодированной строки.
1
21 / 21 / 16
Регистрация: 30.09.2013
Сообщений: 262
27.11.2015, 08:05  [ТС]
Цитата Сообщение от o90990 Посмотреть сообщение
еще один простой способ №2
Спасибо, сделал через serializeArray(), всё вроде пока работает).

Цитата Сообщение от Lazy_Den Посмотреть сообщение
Такая строка, на стороне сервера обрабатывается PHP-функцией parse_str():
Этот вариант мне не подойдет, поскольку получается замкнутый круг, или как минимум избыточно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.11.2015, 08:05
Помогаю со студенческими работами здесь

Ошибка при обработке Json - Cannot deserialize the current JSON array because the type requires a JSON object
Дополнительные сведения: Cannot deserialize the current JSON object (e.g. {&quot;name&quot;:&quot;value&quot;}) into type 'System.Collections.Generic.List`1'...

Java, JSON и JSON Simple. Непонятка с созданием объекта JSON на сервере для отправки на фронт
Здравствуйте. Разрабатываю интернет-магазин на Java. Мне нужно на фронте получить список товаров из базы данных для отображения на...

Как представить себе то что представить не возможно (необычное масшатабирование)
Это странная тема :scratch:, но как к примеру представить население страны? Есть замечательная миллиметровая бумага. Это обычная бумага...

serialize
В php есть функция serialize. Есть ли аналог такой функции в python? Надо сериализовать lambda и передать её на php сервер. Спасибо! :senor:

Serialize
Здравствуйте, вопрос такой Как сериализовать объект имплементирующий Serializable, но имеющий поле List&lt;T&gt;, который не реализует...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru