Answers:
encodeURIComponent(JSON.stringify(object_to_be_serialised))
{["
)。有没有办法只编码必要的字符,以便我可以缩短网址?
您可以使用encodeURIComponent
来对查询字符串的一部分进行安全的URL编码:
var array = JSON.stringify([ 'foo', 'bar' ]);
var url = 'http://example.com/?data=' + encodeURIComponent(array);
或者,如果您将其作为AJAX请求发送:
var array = JSON.stringify([ 'foo', 'bar' ]);
$.ajax({
url: 'http://example.com/',
type: 'GET',
data: { data: array },
success: function(result) {
// process the results
}
});
我一直想做同样的事情。我的问题是我的网址太长了。我今天使用Bruno Jouhier的jsUrl.js库找到了一个解决方案。
我还没有对它进行彻底的测试。但是,以下示例显示了使用3种不同方法对相同的大对象进行编码后输出的字符串的字符长度:
jQuery.param
JSON.stringify + encodeURIComponent
JSURL.stringify
显然,JSURL具有用于urlEncoding js对象的最优化的格式。
https://groups.google.com/forum/?fromgroups=#!topic/nodejs/ivdZuGCF86Q上的线程 显示了编码和解析的基准。
注意:经过测试,jsurl.js库似乎使用了ECMAScript 5函数,例如Object.keys,Array.map和Array.filter。因此,它仅适用于现代浏览器(不支持8及以下版本)。但是,这些功能的polyfill将使其与更多浏览器兼容。
我将提供一个替代方案。有时使用不同的编码会更容易,尤其是当您要处理的系统不能完全以相同的方式处理URL编码的详细信息时。这不是最主流的方法,但是在某些情况下可以派上用场。
您可以对数据进行base64编码,而不是对数据进行URL编码。这样做的好处是,编码数据非常通用,仅包含字母字符,有时包含尾随=
。例:
JSON字符串数组:
["option", "Fred's dog", "Bill & Trudy", "param=3"]
将该数据编码为data
参数的URL :
"data=%5B%27option%27%2C+%22Fred%27s+dog%22%2C+%27Bill+%26+Trudy%27%2C+%27param%3D3%27%5D"
相同,以base64编码:
"data=WyJvcHRpb24iLCAiRnJlZCdzIGRvZyIsICJCaWxsICYgVHJ1ZHkiLCAicGFyYW09MyJd"
base64方法可以更短一些,但更重要的是它更简单。通常由于引号,嵌入式%
符号等原因,我经常在cURL,Web浏览器和其他客户端之间移动URL编码的数据时遇到问题。Base64是非常中性的,因为它不使用特殊字符。
/
用$
,_
或者做其他任何字符不要求每个RFC 3986. url编码
Delan给出的答案是完美的。只需添加它-万一有人要命名参数或分别传递多个JSON字符串-以下代码可能会有所帮助!
jQuery查询
var valuesToPass = new Array(encodeURIComponent(VALUE_1), encodeURIComponent(VALUE_2), encodeURIComponent(VALUE_3), encodeURIComponent(VALUE_4));
data = {elements:JSON.stringify(valuesToPass)}
的PHP
json_decode(urldecode($_POST('elements')));
希望这可以帮助!