将JSON字符串传递给javascript函数

时间:2011-02-16 20:22:51

标签: .net asp.net json

在服务器端,我指定按钮的点击事件

closeWindow.OnClickFunc = String.Format("CloseWindow('{0}');", "{\"codeA\":\"MALE\",\"codeB\":\"SomeCodeB\"}");

当我检查呈现的HTML时,它完全格式错误:

<img onclick="CloseWindow('{" src="close.jpg" id="closeLink">

为了调试这个问题,我摆脱了json字符串中的双引号

closeWindow.OnClickFunc = String.Format("CloseWindow('{0}');", "{codeA:MALE,codeB:SomeCodeB}");

现在HTML符合预期:

<img onclick="CloseWindow('{sectionCodeDB:NEWS,sectionCodeDBNew:NEWS,itemType:REMINDER}');" src="close.jpg" id="closeLink">

因此,双引号存在一些问题,即混乱HTML。

有关如何传递JSON字符串的任何想法吗?

3 个答案:

答案 0 :(得分:3)

免责声明:我从未使用过asp.net,但字符串格式化功能不能如此不同,对吧? ;)

实际上,您不需要将其作为JSON字符串传递,将其作为JavaScript对象传递。尝试:

closeWindow.OnClickFunc = String.Format("CloseWindow({0});", "{codeA:'MALE',codeB:'SomeCodeB'}")
//                                      no quotes ---^-^

如果您在JSON.parse中使用了CloseWindow,则不再需要它了。您可以直接从参数访问数据,例如:param.codeA

<强>更新

关于逃避问题。如果你有

"{\"codeA\":\"MALE\",\"codeB\":\"SomeCodeB\"}"

然后这只会转义服务器端字符串中的引号。生成的代码如下:

 <img onclick="CloseWindow('{"codeA":"MALE","codeB":"SomeCodeB"}'" src="close.jpg" id="closeLink">

显然无效。你需要

<img onclick="CloseWindow('{\"codeA\":\"MALE\",\"codeB\":\"SomeCodeB\"}'" src="close.jpg" id="closeLink">

现在我认为你可以通过字符串中的三个反斜杠来实现这​​个目的:

String.Format("CloseWindow('{0}');", "{\\\"codeA\\\":\\\"MALE\\\",\\\"codeB\\\":\\\"SomeCodeB\\\"}");

虽然可能有更好的方法。正如我所说,我不知道asp.net。

然而,没有必要将数据作为JSON字符串传递。简单的JavaScript更简单。

答案 1 :(得分:1)

你需要在HTML中编码/转义引号,就像你在C#/ VB.NET中转义引号一样。

Server.HtmlEncode(String.Format("CloseWindow('{0}');", "{\"codeA\":\"MALE\",\"codeB\":\"SomeCodeB\"}"));

答案 2 :(得分:-1)

<img onclick="CloseWindow(eval('[{a:123, b:456}]')[0]);" />

将[]添加到字符串b4 eval