Передача строки JSON в функцию JavaScript - PullRequest
1 голос
/ 16 февраля 2011

На стороне сервера я назначаю событие нажатия кнопки

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 ]

3 голосов
/ 16 февраля 2011

Отказ от ответственности: я никогда не использовал 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 голос
/ 16 февраля 2011

Вам нужно кодировать / экранировать кавычки в HTML, как вы экранируете кавычки в C # / VB.NET.

Server.HtmlEncode(String.Format("CloseWindow('{0}');", "{\"codeA\":\"MALE\",\"codeB\":\"SomeCodeB\"}"));
0 голосов
/ 16 февраля 2011
<img onclick="CloseWindow(eval('[{a:123, b:456}]')[0]);" />

добавить [] к строке b4 eval

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...