【发布时间】:2011-10-31 21:21:40
【问题描述】:
我知道这已被问过几次,但请耐心等待。
我有一个相当复杂的谷歌地图对象(它包含各种节点、坐标等),我试图将它作为查询字符串传递。
我需要一个 play javascript/jQuery 解决方案。
我尝试了 .param 方法,它给出了一个 jQuery 错误。唯一有效的是“stringify”方法,然后创建一个字符串,当它显示为 url 时看起来有点像这样:%7B%5C"shape_1%5C"%3A%7B%5C"color%5C"%3A %5C"%237F0000%5C"%2C%5C"数据%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\\":{\\"color\\":\\"#7F0000\\",\\"data\\":{\\"b\\":[{\\"Na \\":51.56727431757122,\\"Oa\\":-0.10462402858888709},...
但我已经说过我不想使用 PHP,我只是向你展示它的作用,以防它帮助你了解 stringify 对对象做了什么。
在我使用 Javascript 取消转义后,它看起来有点正常,例如:
{\"shape_1\":{\"color\":\"#7F0000\",\"data\":{\"b\":[{\"Na\":51.56727431757122,\"Oa \":-0.10462402858888709},..
如您所见,未转义的序列到处都有这些斜线。 当我尝试将其评估为 JSON 对象时,我得到“非法令牌 \”。 parse 方法也失败了。我只是找不到任何方法将此字符串放回原来的复杂 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"))));
尼克
【问题讨论】:
-
如果可能的话,我会避免尝试将 JSON 放入查询字符串中。使用适量的数据,您很容易遇到长度限制。
-
您能想出一种方法将这些坐标从表单传递到电子邮件,然后从电子邮件传回另一个 html 页面吗?
-
将坐标从表单传递到电子邮件是什么意思?您要发送包含坐标的电子邮件吗?然后发送另一封创建 HTML 页面的电子邮件?
标签: php json query-string magic-quotes