Преобразовать объект JavaScript в качестве параметров URL-адреса


Я понимаю, что в принципе я, вероятно, иду по этому неверному пути, поэтому я открыт для любых толчков в правильном направлении.

Я пытаюсь использовать API HipChat для отправки уведомления в комнату следующим образом:

Https://www.hipchat.com/docs/api/method/rooms/message

Я пытаюсь построить URL в Примере с параметрами объекта js, поэтому в основном я пытаюсь преобразовать это:

var hipChatSettings = {
            format:"json",
            auth_token:token,
            room_id: 1,
            from: "Notifications",
            message: "Message"
        }

К это:

Https://api.hipchat.com/v1/rooms/message?format=json&auth_token=token&room_id=1&from=Notifications&message=Message

4 28

4 ответа:

Вы должны проверить этот jQuery.функция param .

var params = { width:1680, height:1050 };
var str = jQuery.param( params );
console.log(str);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Object.keys(hipChatSettings).map(function(k) {
    return encodeURIComponent(k) + "=" + encodeURIComponent(hipChatSettings[k]);
}).join('&')
// => "format=json&auth_token=token&room_id=1&from=Notifications&message=Message"

Предупреждение: новый JavaScript. Если вы хотите, чтобы он работал на древних, shim или переписать в for.

Что-то вроде этого может сработать для вас

var str = "?" + Object.keys(hipChatSettings).map(function(prop) {
  return [prop, hipChatSettings[prop]].map(encodeURIComponent).join("=");
}).join("&");

// "?format=json&auth_token=token&room_id=1&from=Notifications&message=Message"

Если вы не можете зависеть от ECMAScript 5, Вы можете использовать простой цикл for

var pairs = [];

for (var prop in hipChatSettings) {
  if (hipChatSettings.hasOwnProperty(prop)) {
    var k = encodeURIComponent(prop),
        v = encodeURIComponent(hipChatSettings[prop]);
    pairs.push( k + "=" + v);
  }
}

var str = "?" + pairs.join("&");

Попробуйте этот метод:

 public static SerializeParams<T>(Datos: T): string {
            var keys = Object.keys(Datos);
            var stringParams: string = "?";
            for (var i in keys) {
                var name = keys[i];
                if (i == 0)
                    stringParams += name + "=" + JSON.stringify(Datos[name]);
                else
                    stringParams += "&" + name + "=" + JSON.stringify(Datos[name])
            }
            return stringParams;
        };