我知道这个问题已经被问过几次了,但是请原谅我。
我有一个谷歌地图对象,这是相当复杂的(它包含各种节点,坐标等),我试图传递它作为一个查询字符串。
我需要一个play javascript/jQuery解决方案。
我已经尝试了.param方法,它给出了一个jQuery错误。唯一有效的是"stringify"方法,然后创建一个字符串,当出现为url时看起来有点像这样:%7B%5C"shape_1%5C"%3A%7B%5C"%3A%5C"%237F0000%5C"%2C%5C"%3A%7B%5C"b%5C"%3A%5B%7B%5C"Na%5C"% 3a51.56727431757122% 2C%5C"Oa%5C"%3A-0.10462402858888709%7D%2C....
php将其翻译为:{' ' " shape_1 ' ' ":{' '颜色' '":' ' " # 7 f0000 ' ' ", ' ' "数据' ' ":{' ' b ' ' ":[{' '"Na ' '":51.56727431757122,' ' " Oa ' ' ": -0.10462402858888709},…
但是我说过我不想用PHP,我只是给你展示它的功能,如果它能帮助你了解stringify对对象做了什么。
在我用Javascript unescape之后,它看起来更正常一些,像:
{'"shape_1 '":{'颜色'":'"# 7 f0000 '",'"数据'":{' b '":[{'"Na '":51.56727431757122,'"Oa '":-0.10462402858888709},. .
如您所见,未转义序列到处都有斜杠。当我尝试将其评估为JSON对象时,我得到"非法令牌'"。解析方法也会失败。我只是找不到任何方法把这个字符串放回它原来的复杂JSON对象。我在网上寻找了各种建议,但都失败了。我也不明白为什么stringify注入了所有这些斜杠,这些斜杠根本不应该在那里。如果有人有一个想法如何采取该对象,把它放在一个查询字符串,然后解析它回来,我将非常感激。
尼克更新:答案是:
encodeURIComponent(JSON.stringify(myObject));
然后在接收端:
var a = querySt("data");
var b = decodeURIComponent(a);
var c = unescape(b);
var d = JSON.parse(c);
或全部在一行
JSON.parse(unescape(decodeURIComponent(querySt("data"))));
尼克参见http://php.net/manual/de/security.magicquotes.php -您必须关闭魔术引号。它们是老旧的、被弃用的东西,它们是不安全的、容易损坏的东西。
Magic Quotes是一个自动将传入数据转义到PHP脚本的过程。我们更倾向于在代码中去掉魔术引号,并根据需要在运行时转义数据。
Howto: http://www.php.net/manual/de/security.magicquotes.disabling.php
尝试将查询字符串转换为json对象
var queryStringToJSON = function (url) {
if (url === '')
return '';
var pairs = (url || location.search).slice(1).split('&');
var result = {};
for (var idx in pairs) {
var pair = pairs[idx].split('=');
if (!!pair[0])
result[pair[0].toLowerCase()] = decodeURIComponent(pair[1] || '');
}
return result;
}
你可以使用jQuery。参数方法将json对象转换回查询字符串