将javascript对象转换为URL参数

use*_*446 35 javascript url jquery

我意识到,从根本上说,我可能会以错误的方式解决这个问题,所以我愿意向正确的方向努力.

我正在尝试使用HipChat API向房间发送通知,如下所示:

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

我正在尝试使用js对象的参数在示例中构建URL,所以基本上我正在尝试转换它:

var hipChatSettings = {
            format:"json",
            auth_token:token,
            room_id: 1,
            from: "Notifications",
            message: "Message"
        }
Run Code Online (Sandbox Code Playgroud)

对此:

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

mit*_*esh 48

你应该检查这个jQuery.param函数.

var params = { width:1680, height:1050 };
var str = jQuery.param( params );
console.log(str);
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

  • 他没有读懂你的想法.当您询问有关JavaScript的内容时,就在Stack Overflow上,即使您明确表示不想要jQuery答案,也会获得90个jQuery答案.在将来需要非jQuery JavaScript答案时请记住这一点.;) (8认同)

Ama*_*dan 40

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"
Run Code Online (Sandbox Code Playgroud)

警告:新的JavaScript.如果你想让它适用于古人,垫片或重写for.


mač*_*ček 12

这样的事可能对你有用

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"
Run Code Online (Sandbox Code Playgroud)

如果你不能依赖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("&");
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个答案.对于ES6,您可以进一步调整到`function makeParams(params)=> {return params?'?' + Object.keys(params).map((key)=>([key,params [key]].map(encodeURIComponent).join("="))).join("&"):''}`你可以将它附加到你的路径上,`path + makeParams(params)`它处理undefined,null和`{} (2认同)