2011-10-15 66 views
8

我在C#(ASP.NET)中有一個字典變量。我想將這些數據發送到Javascript。我正在使用此代碼將其序列化併發送到JavaScript。閱讀Javascript中的C#詞典

Dictionary<string, string> chat; 
chat = new Dictionary<string, string>(); 

chat.Add("Sam", "How are you?"); 
chat.Add("Rita", "I am good"); 
var serialize = new System.Web.Script.Serialization.JavaScriptSerializer(); 

Response.Write(serialize.Serialize(chat)); 

在Javascript頁面上,我打電話給這個頁面;

$.ajax({ 
url: "TextChatCalls/getChat.aspx", 
type: "POST", 
context: document.body, 
success: function (response) { 
      var Chats = response.split('\n')[0]; 
      alert(Chats); 

      } 
}); 

在聊天VAR值是{"Sam":"How are you?","Rita":"I am good"}

我不知道我怎麼讀聊天此值。我可以將它轉換成二維數組,並將其讀爲數組[0] [0],數組[1] [0]等。

謝謝。

編輯: 一個更加混亂的是,響應對象,從ASP.NET返回,包含

{"Sam":"How are you?","Rita":"I am good"} 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head><title> 

</title></head> 
<body> 
    <form name="form1" method="post" action="getChat.aspx?Id=141755" id="form1"> 
<div> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZJctiKZK4rXVndR3mbGssIarCrOF" /> 
</div> 

    <div> 

    </div> 
    </form> 
</body> 
</html> 

而且不只是{"Sam":"How are you?","Rita":"I am good"}預期。因此我必須將響應對象拆分爲var Chats = response.split('\n')[0];,這使得它成爲一個字符串!

回答

19

您這樣讀:

alert(Chats["Sam"]); 

(所以像一個C#詞典:-)。您閱讀使用類似Chats["propertyName"] /寫入)

,或者要經過的每個值:

for (var c in Chats) 
{ 
    if (Chats.hasOwnProperty(c)) 
    { 
     alert(c + ' ' + Chats[c]); 
    } 
} 

注意,這是比C#不同。在C#c中將包含一個包含密鑰和值的KeyValuePair<>。在Javascript中,c只是關鍵,並且要獲得必須使用的值Chats[c]

(用於hasOwnProperty的理由是這裏http://yuiblog.com/blog/2006/09/26/for-in-intrigue/

現在......如果你真的要拆呢:

var array = []; 

for (var c in Chats) 
{ 
    if (Chats.hasOwnProperty(c)) 
    { 
     array.push([c, Chats[c]]); 
    } 
} 
+0

我不明白爲什麼,但我的反應對象包含此值「{」山姆「:」你好嗎「‘麗塔’:」我好「} <!DOCTYPE html PUBLIC」 - // W3C // DTD XHTML 1.0 Transitional // EN「」http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd「> <形式名稱= 「form1的」 方法=」後 「行動= 」getChat.aspxα-ID = 141755「 ID = 」form1的「>

」 – Jayesh

+2

@Joy你必須做一個到Response.End'()'後' Response.Write()',否則你會發送完JSON後的整個aspx頁面:-) – xanatos

+2

謝謝。有效。 – Jayesh

3

不僅僅是數據類型JSON添加到您的Ajax請求

$.ajax({ 
url: "TextChatCalls/getChat.aspx", 
type: "POST", 
dataType: "json" 
context: document.body, 
success: function (response) { 
      // do something with response 
}); 

這將使response一個JavaScript對象,你可以像這樣訪問

alert(response["sam"]) //How are you? 

到拆分成一個二維數組只是做到這一點

var Chats = []; 
for (k in response){ 
    Chats[Chats.length] = [k, response[k]]; 
} 
3

我想這裏最重要的一點是,你正確地明白是怎麼回事在JavaScript客戶端上。到達JavaScript客戶端的數據類型是一個JSON字符串。 JSON(= JavaScript Object Notation)可以直接由JavaScript解釋。

JavaScript對象看起來如下:

var anObject = { name: "Sam", surname: "abc"}; 

您可以通過像

anObject["name"] //will get "Sam" 

,或者直接(屬性符號)

稍微字典 - 類似的方式訪問一個JavaScript對象的屬性
anObject.name 

而是一個類似的JSON字符串看起來像

var aJsonString = '{ "name": "Sam", "surname": "abc"}' 

現在要將JSON字符串轉換爲JavaScript對象,您需要解析它。 jQuery已經爲你做了這件事,否則你可以調用JSON.parse(aJsonString),你會得到一個有效的JavaScript對象。

在這裏,我做了一個簡單的例子:http://jsbin.com/adejev/2/edit