У меня есть данные Javascript:
[{id:123,type:"test"},{id:154,type:"another"}]
Как бы вы превратили это во что-то, чтобы я мог передать его как HTTP-запрос на отправку?
menu[0][id] = 123
menu[0][type] = test
menu[1][id] = 154
menu[1][type] = another
Я не хочу передавать фактические данные JSON, я хочу очистить их и передать как отформатированные параметры HTTP.
РЕДАКТИРОВАТЬ
Удалось разобрать объект на стороне клиента, используя что-то вроде этого, может быть, вы, ребята, предложите что-нибудь получше, прежде чем я подпишу это как «отвечено»?
this.serialize = function(elem) {
var childs = elem.childElements();
var str = "";
for(var i=0, item; i<childs.length; i++) {
item = childs[i];
str += ((i)?"&":"")+"menu[" + i +"][id] = " + item.id.replace(/item_/,"");
str += "&menu[" + i +"][type] = " + item.className;
str += "&menu[" + i +"][section] = " + elem.id;
str += "&menu[" + i +"][position] = " + i;
}
return str;
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


"?qsparam = " + escape("[{id:123,type:'test'},{id:154,type:'another'},...]")
Возможно, вы не поняли мой вопрос, в любом случае это неправильно, я не хочу передавать фактические данные JSON, я хочу очистить их и передать как форматированные параметры HTTP.
menu0.id = 123 & menu0.type = test & menu1.id = 154 & menu1.type = другое
Это довольно легко проанализировать на сервере, поскольку это обычный формат.
Я считаю, что HTTP POST принимает только плоскую коллекцию ключей / значений, а не любую произвольную структуру данных JavaScript.
Если вы может сглаживаете его (например, как показывает Джон Штауффер), и если вы публикуете в своем собственном домене, вы можете использовать XMLHttpRequest для публикации и передачи коллекции ключей / значений, отформатированной как строка запроса, с .send (данные) метод.
Если вы не хотите реализовывать это самостоятельно, большинство библиотек JavaScript должны иметь реализацию (например, jQuery.post).
var data = [{id:123,type:"test"},{id:154,type:"another"}];
var params = new Array();
for(var x = 0; x < data.length; x++) {
params.push("id=[" + x + "] = " + escape(data[x].id));
params.push("type=[" + x + "] = " + escape(data[x].type));
}
alert(params.join("&")); // output: id=[0]=123&type=[0]=test&id=[1]=154&type=[1]=another
Это то, что вы хотите?
о, хорошо, спасибо, похоже на мое решение, отмечу, что вы спросите исправлено.
Будьте осторожны, вы не должны перебирать массивы javascript, используя for (x in obj). Я считаю, что это не работает в IE, используйте for (var i = 0 ...);
Разве это не сломается, только если люди испортят прототип?
Я знаю, что он ломается, если загружается библиотека "прототипов".
@LucaMatteis внутренние свойства также повторяются, это также проблема, если у вас есть прокладки на Object.prototype. Вы можете добавить Object.hasOwnProperty (instance) в качестве проверки работоспособности в любом случае.
Вы ищете синтаксис, который должны были бы принимать параметры запроса?