2011-10-15 16 views
8

Mam zmienną słownikową w języku C# (ASP.NET). Chcę wysłać te dane do JavaScript. Używam tego kodu do serializowania go i wysyłania do javascript.Czytanie słownika C# w JavaScript

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)); 

Na stronie Javascript, wywołuję tę stronę za pomocą tego;

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

      } 
}); 

Wartość w Chats var jest {"Sam":"How are you?","Rita":"I am good"}

nie wiem jak mogę odczytać tę wartość w czatach. Czy mogę w jakiś sposób przekonwertować to na tablicę 2D i odczytać ją jako tablicę [0] [0], tablicę [1] [0] itd.?

Dzięki.

EDIT: Jeden więcej zamieszania jest to, że obiekt odpowiedzi, wrócił z ASP.NET, zawiera

{"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> 

a nie tylko {"Sam":"How are you?","Rita":"I am good"} jak oczekiwano. I dlatego muszę podzielić obiekt odpowiedzi przez var Chats = response.split('\n')[0]; co czyni go ciągiem!

Odpowiedz

19

Czytasz w ten sposób:

alert(Chats["Sam"]); 

(tak jak słownik C# :-). Ci odczytu/zapisu do niego przy użyciu coś jak Chats["propertyName"])

lub, aby przejść każdej wartości:

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

pamiętać, że jest inny niż C#. W języku C# c będzie zawierać KeyValuePair<> zawierający zarówno klucz, jak i wartość. W JavaScript c jest tylko kluczem i aby uzyskać wartość, musisz użyć Chats[c].

(rozumowanie dla hasOwnProperty jest tutaj http://yuiblog.com/blog/2006/09/26/for-in-intrigue/)

teraz ... Jeśli naprawdę chcesz go podzielić:

var array = []; 

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

Nie mogę zrozumieć dlaczego, ale mój obiekt odpowiedź zawierającą tę wartość „{” SAM „:” Jak się masz „«Rita?»:” Jestem dobry "}

" – Jayesh

+2

@Joy Trzeba zrobić 'Response.End()' po ' Response.Write() ', poza tym wyślesz całą stronę aspx po JSON :-) – xanatos

+2

Dzięki. Zadziałało. – Jayesh

3

Wystarczy dodać typ danych json do ajax żądanie

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

To sprawi response javascript obiektu, który można uzyskać dostęp jak ten

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

podzielić, że aż do 2d tablicy tylko zrób to:

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

Myślę, że ważnym punktem jest to, że właściwie zrozumieć, co się dzieje włączone po stronie klienta JavaScript. Typem danych, który dociera po stronie klienta JavaScript, jest ciąg znaków JSON. JSON (= JavaScript Object Notation) może być bezpośrednio interpretowany przez JavaScript.

obiekt

javascript wygląda następująco:

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

Można uzyskać dostęp do właściwości obiektu JavaScript albo przez nieco słownika podobny sposób jak

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

lub bezpośrednio (oznaczenie nieruchomości)

anObject.name 

Zamiast tego podobny ciąg JSON wyglądałby tak:

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

Teraz, aby przekonwertować ciąg JSON na obiekt JavaScript, należy go przeanalizować. jQuery robi to już dla ciebie, w przeciwnym razie możesz wywołać JSON.parse(aJsonString), a otrzymasz prawidłowy obiekt JavaScript.

Tutaj zrobiłem krótki przykład: http://jsbin.com/adejev/2/edit