2011-10-15 50 views
8

Tôi có một biến từ điển trong C# (ASP.NET). Tôi muốn gửi dữ liệu này tới Javascript. Tôi đang sử dụng mã này để serialize nó và gửi đến javascript.Đọc từ điển C# trong 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)); 

Trên trang Javascript, tôi đang gọi trang này bằng cách sử dụng này;

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

      } 
}); 

Giá trị trong Trò chuyện var là {"Sam":"How are you?","Rita":"I am good"}

Tôi không biết làm thế nào để đọc giá trị này trong Trò chuyện. Tôi có thể chuyển đổi nó thành một mảng 2D và đọc nó như mảng [0] [0], mảng [1] [0] vv?

Cảm ơn.

EDIT: Một sự nhầm lẫn hơn là, đối tượng phản ứng, trở về từ ASP.NET, chứa

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

Và không chỉ {"Sam":"How are you?","Rita":"I am good"} như mong đợi. Và do đó tôi phải chia đối tượng phản hồi bằng var Chats = response.split('\n')[0]; làm cho nó trở thành một chuỗi!

Trả lời

19

Bạn đọc như sau:

alert(Chats["Sam"]); 

(giống như từ điển C# :-). Bạn đọc/ghi vào nó sử dụng giống như Chats["propertyName"])

hay, phải đi qua mỗi giá trị:

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

Lưu ý rằng đây là khác nhau hơn so với C#. Trong C# c sẽ chứa một KeyValuePair<> chứa cả khóa và giá trị. Trong Javascript c chỉ là khóa và để lấy giá trị bạn phải sử dụng Chats[c].

(lý do cho hasOwnProperty là ở đây http://yuiblog.com/blog/2006/09/26/for-in-intrigue/)

Bây giờ ... Nếu bạn thực sự muốn chia nó:

var array = []; 

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

Tôi không thể hiểu tại sao, nhưng đối tượng phản ứng của tôi chứa giá trị này "{" Sam ":" How are you " 'Rita?':" Tôi tốt "}

" – Jayesh

+2

@Joy Bạn phải làm một 'Response.End() 'sau' Response.Write() ', otherwhise bạn sẽ gửi toàn bộ trang aspx sau JSON :-) – xanatos

+2

Cảm ơn. Nó đã làm việc. – Jayesh

3

Chỉ cần thêm các kiểu dữ liệu json để yêu cầu ajax của bạn

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

Điều này sẽ làm response một đối tượng javascript mà bạn có thể truy cập như thế này

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

chia đó lên thành một mảng 2ngày chỉ làm điều này

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

Tôi đoán điểm quan trọng ở đây là bạn đúng cách hiểu chuyện gì đang xảy ở phía máy khách JavaScript. Kiểu dữ liệu đến trên phía máy khách JavaScript là một chuỗi JSON. JSON (= Ký hiệu đối tượng JavaScript) có thể được JavaScript hiểu trực tiếp.

đối tượng

Một JavaScript trông như sau:

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

Bạn có thể truy cập vào các thuộc tính của một đối tượng JavaScript hoặc thông qua một chặng đường khá điển-tương tự như

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

hoặc trực tiếp (ký hiệu tài sản)

anObject.name 

Thay vào đó, chuỗi JSON tương tự sẽ giống như

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

Bây giờ để chuyển đổi chuỗi JSON thành đối tượng JavaScript bạn cần phân tích cú pháp. jQuery thực hiện điều này cho bạn, nếu không bạn có thể gọi JSON.parse(aJsonString) và bạn sẽ nhận được một đối tượng JavaScript hợp lệ.

Ở đây tôi đã làm một ví dụ nhanh: http://jsbin.com/adejev/2/edit