在谷歌浏览器中,我试过这个:
我在javascript中有一个对象,例如,
var b = {
text: 'hello world, you "cool"'
};
然后我使用JSON.stringify将其转换为字符串,并在db中发送到db,它将如下所示:
{"text":"hello world, you \"cool\""}
然后我从服务器上的db获取它,并尝试发送回js然后解析它,当然它是一个有效的JSON字符串,但用这种方式通过服务器脚本语言将它传递给javascript:
"javascript:loadText(' + str + ')"...
其中loadText
是一个javascript函数:
function loadText(val) {
console.log(JSON.parse(val));
}
我们会收到错误,但如果我们只在javascript中尝试其他方式,则不会出现此错误:
var b = {
text: 'hello world, you "cool"'
};
console.log(JSON.parse(JSON.stringify(b)));
是因为JSON字符串化/解析算法?
PS:
这也是错误的:
loadText('{"text":"hello world, you \"cool\""}');
答案 0 :(得分:0)
请勿尝试通过查看服务器端代码来调试JavaScript错误。
看看你正在生成的JS。
"javascript:loadText(' + str + ')"
会给你一些类似的东西:
"javascript:loadText({"text":"hello world, you \"cool\""})"
所以你有一个JavaScript对象文字,而不是一个JSON字符串。
您必须使用引号包装数据并转义任何特殊字符,以便在将其嵌入JS时将其保留为JSON。
根据位置,您应该对其进行URL编码。
答案 1 :(得分:0)
您的"javascript:loadText(' + str + ')"
确实试图将文字+ str +
传递给loadText
。
您可以修改引文或间接制作'
:
javascript:loadText(String.fromCharCode(39) + str + String.fromCharCode(39))