Подобные примеры есть, но они, похоже, не решают эту конкретную проблему. Ранее я сериализовал форму с помощью jQuery для обработки AJAX. Я хотел использовать ту же сериализованную форму и преобразовать ее в объект JSON. Найденные мной примеры не касались удаления всех специальных символов, добавленных при первоначальной сериализации. Поэтому я публикую это здесь и отвечаю в надежде, что это будет полезно и сэкономит кому-то время, которое я уже потратил. ИЛИ, возможно, у кого-то есть что-то более элегантное.
Итак, у нас есть сериализованная форма:
Form1 = $('#MyForm').serialize(); // Name=Mr.+John+Mark+Jr.&Email=john%40example.com
Что с ним делать, чтобы получить работоспособный объект JSON?

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», как я уже сказал, был определен ранее.)