Преобразование сериализованного URL-адреса jQuery в объект JSON

Подобные примеры есть, но они, похоже, не решают эту конкретную проблему. Ранее я сериализовал форму с помощью jQuery для обработки AJAX. Я хотел использовать ту же сериализованную форму и преобразовать ее в объект JSON. Найденные мной примеры не касались удаления всех специальных символов, добавленных при первоначальной сериализации. Поэтому я публикую это здесь и отвечаю в надежде, что это будет полезно и сэкономит кому-то время, которое я уже потратил. ИЛИ, возможно, у кого-то есть что-то более элегантное.

Итак, у нас есть сериализованная форма:

Form1 = $('#MyForm').serialize();  // Name=Mr.+John+Mark+Jr.&Email=john%40example.com

Что с ним делать, чтобы получить работоспособный объект JSON?

Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
0
0
37
1

Ответы 1

Form1 = $('#MyForm').serialize();  // Name=Mr.+John+Mark+Jr.&Email=john%40example.com
  Form1 = Form1.replace(/\+/g, '%20'); // Name=Mr.%20John%20Mark%20Jr.&Email=john%40example.com
  var Decoded = decodeURIComponent(Form1); // Name=Mr. John Mark Jr.&[email protected]
  var Values = queryParamsToJson(Decoded); // { Name : "Mr. John Mark Jr.", Email : "[email protected]" }

  function queryParamsToJson(theURL)
  {
     var href = theURL;
     var qStr = href.replace(/(.*?\?)/, '');
     var qArr = qStr.split('&');
     var stack = {};
     for (var i in qArr)
     {
        var a = qArr[i].split('=');
        var name = a[0],
        value = a[1];
        if (name.match(/(.*?)\[(.*?)]/))
        {
           name = RegExp.$1;
           name2 = RegExp.$2;
           //alert(RegExp.$2)
           if (name2)
           {
              if (!(name in stack))
              {
                 stack[name] = {};
              }
              stack[name][name2] = value;
           }
           else
           {
              if (!(name in stack))
              {
                 stack[name] = [];
              }
              stack[name].push(value);
           }
        }
        else
        {
           stack[name] = value;
        }
     }
     return stack;
  }

Я отредактировал сценарий, но, пожалуйста, поправьте меня, если я ошибаюсь. Что касается области видимости в JavaScript, я всегда понимал, что глобальную переменную можно создать, только определив ее вне функции. Использование «var» сохранит область действия внутри функции, если есть глобальная переменная с таким же именем. В противном случае эта переменная повлияет на глобальную. Хотя это хорошая практика, насколько я понимаю, объявление переменной внутри функции без предшествующего «var» не создает глобальную переменную. («Form1», как я уже сказал, был определен ранее.)

RationalRabbit 10.02.2019 08:24

Хорошо знать. Спасибо.

RationalRabbit 10.02.2019 09:22

Другие вопросы по теме