Представлять строку запроса в формате JSON - PullRequest
0 голосов
/ 15 января 2009

У меня есть данные 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.

EDIT

Был ли в состоянии разобрать объект на стороне клиента, используя что-то вроде этого, может быть, вы, ребята, предложите что-то лучше, прежде чем я подпишу это как "ответил"?

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;
}

Ответы [ 4 ]

3 голосов
/ 15 января 2009
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

Это то, что вы хотите?

0 голосов
/ 15 января 2009

menu0.id = 123 & menu0.type = тест & menu1.id = 154 & menu1.type = другое

Это довольно легко разобрать на сервере, поскольку это обычный формат.

0 голосов
/ 15 января 2009

Я полагаю, что HTTP POST принимает только набор плоских ключей / значений, а не произвольную структуру данных JavaScript.

Если вы можете сгладить его (например, как показывает Джон Штауффер), а если вы публикуете на своем собственном домене, вы можете использовать XMLHttpRequest для публикации и передачи ключа / значения коллекция, отформатированная как строка запроса, с использованием метода .send (data) .

Если вы не хотите реализовывать это самостоятельно, большинство библиотек JavaScript должно иметь реализацию (например, jQuery.post ).

0 голосов
/ 15 января 2009
"?qsparam=" + escape("[{id:123,type:'test'},{id:154,type:'another'},...]")
...