Преобразование сериализованного URL-адреса jQuery в объект JSON - PullRequest
0 голосов
/ 10 февраля 2019

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

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

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

Что с этим делать для достижения работоспособного объекта JSON?

1 Ответ

0 голосов
/ 10 февраля 2019
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=john@example.com
  var Values = queryParamsToJson(Decoded); // { Name : "Mr. John Mark Jr.", Email : "john@example.com" }

  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;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...