【问题标题】:Convert jQuery Serialized URL to JSON Object将 jQuery 序列化 URL 转换为 JSON 对象
【发布时间】:2019-07-03 23:30:19
【问题描述】:

有类似的例子,但它们似乎并没有解决这个特定的问题。我之前用 jQuery 序列化了一个表单,用于 AJAX 处理。我想使用相同的序列化形式并将其转换为 JSON 对象。我发现的示例并未解决删除初始序列化中添加的所有特殊字符的问题。所以我在这里发布这个并回答,希望它会有所帮助并节省我已经花费的时间。或者也许有人有更优雅的东西。

所以,我们有一个序列化的形式:

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

如何用它来实现一个可行的 JSON 对象?

【问题讨论】:

    标签: jquery json object serialization


    【解决方案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=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;
      }
    

    【讨论】:

    • 我编辑了脚本,但如果我错了,请纠正我。我一直明白,关于 JavaScript 中的作用域,只能通过在函数之外定义全局来创建全局。如果有同名的全局变量,使用“var”将保持函数内部的范围。否则,该变量将影响全局。虽然是很好的做法,但我的理解是,在没有前面“var”的函数内声明变量不会创建全局变量。 (正如我所说,“Form1”是之前定义的。)
    • 很高兴知道。谢谢。
    猜你喜欢
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    相关资源
    最近更新 更多