Я создал функцию для генерации формы на основе URL, цели и объекта в качестве метода POST
/ GET
data и submit.Он поддерживает вложенные и смешанные типы внутри этого объекта, поэтому он может полностью копировать любую структуру, которую вы передаете ему: PHP автоматически анализирует его и возвращает как вложенный массив.Однако есть одно ограничение: скобки [
и ]
не должны быть частью какого-либо ключа в объекте (например, {"this [key] is problematic" : "hello world"}
).Если кто-то знает, как избежать этого, пожалуйста, сообщите!
Без лишних слов, вот источник:
function getForm(url, target, values, method) {
function grabValues(x) {
var path = [];
var depth = 0;
var results = [];
function iterate(x) {
switch (typeof x) {
case 'function':
case 'undefined':
case 'null':
break;
case 'object':
if (Array.isArray(x))
for (var i = 0; i < x.length; i++) {
path[depth++] = i;
iterate(x[i]);
}
else
for (var i in x) {
path[depth++] = i;
iterate(x[i]);
}
break;
default:
results.push({
path: path.slice(0),
value: x
})
break;
}
path.splice(--depth);
}
iterate(x);
return results;
}
var form = document.createElement("form");
form.method = method;
form.action = url;
form.target = target;
var values = grabValues(values);
for (var j = 0; j < values.length; j++) {
var input = document.createElement("input");
input.type = "hidden";
input.value = values[j].value;
input.name = values[j].path[0];
for (var k = 1; k < values[j].path.length; k++) {
input.name += "[" + values[j].path[k] + "]";
}
form.appendChild(input);
}
return form;
}
Пример использования:
document.body.onclick = function() {
var obj = {
"a": [1, 2, [3, 4]],
"b": "a",
"c": {
"x": [1],
"y": [2, 3],
"z": [{
"a": "Hello",
"b": "World"
}, {
"a": "Hallo",
"b": "Welt"
}]
}
};
var form = getForm("http://example.com", "_blank", obj, "post");
document.body.appendChild(form);
form.submit();
form.parentNode.removeChild(form);
}