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

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

22.11.2015, 02:14. Показов 2584. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru