Чтение C # словаря в Javascript - PullRequest
       5

Чтение C # словаря в Javascript

12 голосов
/ 15 октября 2011

У меня есть словарь переменной в C # (ASP.NET).Я хочу отправить эти данные в Javascript.Я использую этот код для его сериализации и отправки в 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));

На странице Javascript я вызываю эту страницу, используя это;

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

          }
 });

Значение в 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];, что делает его строкой!

Ответы [ 3 ]

24 голосов
/ 15 октября 2011

Вы читаете так:

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]]);
    }
}
3 голосов
/ 15 октября 2011

Полагаю, важным моментом здесь является то, что вы правильно понимаете, что происходит на стороне клиента JavaScript. Тип данных, который поступает на клиентскую часть JavaScript, представляет собой строку JSON. JSON (= объектная нотация JavaScript) может интерпретироваться непосредственно JavaScript.

Объект JavaScript выглядит следующим образом:

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

Вы можете получить доступ к свойствам объекта JavaScript через словарь, похожий на

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

или напрямую (запись свойства)

anObject.name

Вместо этого похожая строка JSON будет выглядеть как

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

Теперь, чтобы преобразовать строку JSON в объект JavaScript, вам нужно ее проанализировать. jQuery делает это уже для вас, в противном случае вы можете вызвать JSON.parse(aJsonString), и вы получите действительный объект JavaScript.

Здесь я сделал быстрый пример: http://jsbin.com/adejev/2/edit

3 голосов
/ 15 октября 2011

Просто добавьте тип данных 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?

чтобы разделить это на 2d массив просто сделайте это

var Chats = [];
for ( k in response ){
  Chats[Chats.length] = [k, response[k]];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...