Представьте строку запроса в JSON

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

Вы ищете синтаксис, который должны были бы принимать параметры запроса?

Allain Lalonde 15.01.2009 22:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
6 214
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

"?qsparam = " + escape("[{id:123,type:'test'},{id:154,type:'another'},...]")

Возможно, вы не поняли мой вопрос, в любом случае это неправильно, я не хочу передавать фактические данные JSON, я хочу очистить их и передать как форматированные параметры HTTP.

Luca Matteis 15.01.2009 22:47

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

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

о, хорошо, спасибо, похоже на мое решение, отмечу, что вы спросите исправлено.

Luca Matteis 15.01.2009 23:22

Будьте осторожны, вы не должны перебирать массивы javascript, используя for (x in obj). Я считаю, что это не работает в IE, используйте for (var i = 0 ...);

Luca Matteis 15.01.2009 23:27

Разве это не сломается, только если люди испортят прототип?

Paolo Bergantino 15.01.2009 23:29

Я знаю, что он ломается, если загружается библиотека "прототипов".

krosenvold 15.01.2009 23:52

@LucaMatteis внутренние свойства также повторяются, это также проблема, если у вас есть прокладки на Object.prototype. Вы можете добавить Object.hasOwnProperty (instance) в качестве проверки работоспособности в любом случае.

Tracker1 01.09.2012 04:51

Другие вопросы по теме