Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将javascript对象转换为URL参数_Javascript_Jquery_Url - Fatal编程技术网

将javascript对象转换为URL参数

将javascript对象转换为URL参数,javascript,jquery,url,Javascript,Jquery,Url,我意识到,从根本上说,我可能走错了方向,所以我愿意接受任何朝着正确方向的推动 我正在尝试使用HipChat API向以下房间发送通知: 我试图使用js对象的参数构建示例中的URL,因此基本上我试图转换以下内容: var hipChatSettings = { format:"json", auth_token:token, room_id: 1, from: "Notifications",

我意识到,从根本上说,我可能走错了方向,所以我愿意接受任何朝着正确方向的推动

我正在尝试使用HipChat API向以下房间发送通知:

我试图使用js对象的参数构建示例中的URL,因此基本上我试图转换以下内容:

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


警告:新的JavaScript。如果你想让它在古人身上起作用,那么为

填充或重写成
,类似的东西可能会对你起作用

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("&");
你应该检查一下这个

var参数={宽度:1680,高度:1050};
var str=jQuery.param(params);
console.log(str)

ES6版本,可以使用数组实现真正的嵌套对象

encodeURI(getUrlString({a:1,b:[true,12.3,“string”]}))


舞会很晚了,但我很享受这句话的简洁:

  Object.entries(hipChatSettings)
    .map(
      ([key, val]) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`
    )
    .join("&");

(我应该说我在使用jQuery,但你很明显读到了我的心思):)他没有读到你的心思。只是在堆栈溢出时,当您询问JavaScript时,您将得到90个jQuery答案,即使您明确表示不需要jQuery答案。将来当您需要非jQuery JavaScript答案时,请记住这一点。;)@L0j1k你是对的,但是jQuery的答案对其他从谷歌来这里的人来说是有用的,即使他们对OP毫无用处。所以我认为这是一种很好的时尚。他没有读懂你的心思。他看了看你的关键词。因此,这避免了我通常对这种做法投的反对票。我喜欢这个答案。对于ES6,您可以进一步调整
函数makeParams(params)=>{return params?'?'+Object.keys(params).map((key)=>([key,params[key]]].map(encodeURIComponent.join(“=”)))。join(&”):'}
,您可以将其附加到路径上,
路径+makeParams(params)
,它处理未定义、null和
{}
可能的重复事实上只有这个答案适用于多层嵌套对象/数组,除了jQuery one,但是jQuery lib太大了,如果只用于这个单一目的,它非常适用于嵌套对象,这是我找到的最好的答案,我只添加了encodeURIComponent(val)。
getUrlString (params, keys = [], isArray = false) {
  const p = Object.keys(params).map(key => {
    let val = params[key]

    if ("[object Object]" === Object.prototype.toString.call(val) || Array.isArray(val)) {
      if (Array.isArray(params)) {
        keys.push("")
      } else {
        keys.push(key)
      }
      return getUrlString(val, keys, Array.isArray(val))
    } else {
      let tKey = key

      if (keys.length > 0) {
        const tKeys = isArray ? keys : [...keys, key]
        tKey = tKeys.reduce((str, k) => { return "" === str ? k : `${str}[${k}]` }, "")
      }
      if (isArray) {
        return `${ tKey }[]=${ val }`
      } else {
        return `${ tKey }=${ val }`
      }

    }
  }).join('&')

  keys.pop()
  return p
}
  Object.entries(hipChatSettings)
    .map(
      ([key, val]) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`
    )
    .join("&");