2011-02-16 45 views
1

在服務器端,我分配一個按鈕的點擊事件傳遞JSON字符串javascript函數

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字符串的任何想法?

+5

您實際上不需要將它作爲JSON字符串傳遞,將它作爲JavaScript對象傳遞。您是否嘗試過:`String.Format(「CloseWindow({0});」,「{codeA:'MALE',codeB:'SomeCodeB'}」)`? (如果你使用`JSON。在`CloseWindow`中解析`,你不需要這個了) – 2011-02-16 20:25:45

+2

@Felix,你可能應該在回答中包裝該評論:) – 2011-02-16 20:32:47

+0

@FrédéricHamidi:好的。完成;) – 2011-02-16 20:37:53

回答

1

你需要編碼/逃避HTML引號,就像你逃脫在C#/ VB.NET引號。

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

聲明:我從來沒有使用asp.net,但字符串格式化函數不能這麼不同,對吧? ;)

實際上,您不需要將它作爲JSON字符串傳遞,將它作爲JavaScript對象傳遞。嘗試:

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

如果您在使用CloseWindowJSON.parse,你不需要這樣了。您可以直接從參數訪問數據,如: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
<img onclick="CloseWindow(eval('[{a:123, b:456}]')[0]);" /> 

加[]符號串B4 EVAL

相關問題