用于将JSON键值对象转换为查询字符串的JavaScript函数

ma1*_*w28 4 javascript json iterator escaping urlencode

我正在为Facebook Feed对话框格式化URL .但是有很多参数.我想为这些对话框提供一个函数,例如:

function generateDialogUrl(dialog, params) {
  base  = "http://www.facebook.com/dialog/" + dialog + "?";
  tail = [];
  for (var p in params) {
    if (params.hasOwnProperty(p)) {
      tail.push(p + "=" + escape(params[p]));
    }
  }
  return base + tail.join("&")
}
Run Code Online (Sandbox Code Playgroud)

哇哇...我想我刚回答了自己的问题.是对的吗?是否escape()使用正确的功能?

我陷入了恋人的源代码.

更新:因为,我们正在使用jQuery,我重写了使用的方法jQuery.each.我也按照@galambalazs和@TJ Crowder的建议更换escape()encodeURIComponent().多谢你们!

var generateDialogUrl = function (dialog, params) {
  base  = "http://www.facebook.com/dialog/" + dialog + "?";
  tail = [];
  $.each(params, function(key, value) {
    tail.push(key + "=" + encodeURIComponent(value));
  })
  return base + tail.join("&");
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理!

gbl*_*zex 7

更好的是,encodeURIComponent改为使用.看到这篇文章比较两者:

逃逸()方法不编码,其与在各自的领域空间解释为空间上的服务器侧以及生成由表格+字符.由于这个缺点以及此函数无法正确处理非ASCII字符的事实,您应该尽可能避免使用escape().的最佳替代品通常是 encodeURIComponent方法() .

escape()不会编码:@*/+