2010-02-04 62 views
1

我正在關注this link以構建客戶端中繼器。從Json Key Value Pair獲取Value的問題

根據上述鏈接以檢索來自一個JSON鍵 - 值對,我們可以使用結果[I]的.property值,例如

for (var post in msg) 
{  
    var x= msg[post].Date; 
    alert(x); 
} 

這裏x返回從JSON字符串的日期。當我嘗試使用我的數據時,它始終返回爲undefined。我試圖彈出一個alert(msg.d),顯示一個很好的Json字符串和我的所有數據。但是,當我嘗試msg[post].Date(property name)它總是返回undefined

請幫忙..

在此先感謝。

更新:

從我返回泛型列表,然後使用下面的代碼將其轉換爲JSON的後端。

公共靜態字符串ConvertToJSON(此obj對象) {

DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());  

    MemoryStream ms = new MemoryStream(); 
    serializer.WriteObject(ms, obj); 
    string jsonobj = Encoding.Default.GetString(ms.ToArray()); 
    ms.Dispose(); 
    return jsonobj; 
} 

那麼我追加返回的JSON到一個StringBuilder並返回了jQuery AJAX method.The返回的JSON看起來像一個字符串,而不是一個對象,因此我無法從Json鍵值對中獲得任何價值。

+0

你可以發佈什麼時你調用alert(msg.d)返回? – user113716 2010-02-04 17:11:24

+0

得到螢火蟲,放置一個斷點並觀察觀察窗口中的不同值。檢查發佈內容,msg [post]。 – 2010-02-04 17:15:00

+0

嗨帕特里克, 以下是我做alert(msg.d)時返回的內容樣本 [{「AnsNo」:0,「Answer」:「」,「Category」:「Help Centre.Mortgages.Existing客戶「,」ClickURL「:空,」ID「:7,」問題「:」我如何重新抵押給您?「,」RecNo「:0,」ValidFrom「:」\/Date(-62135596800000 + 0000 )\\「,」ValidUntill「:」\\ Date(-62135596800000 + 0000)\ /「}] 所以我試着用msg [post] .AnsNo,msg [post] .Answer,msg [post] .Category等 – kranthi 2010-02-04 17:17:03

回答

1

更新:

這聽起來像你在服務器端加倍序列化數據,返回一個JSON字符串,它被序列化爲JSON本身。當到達客戶端並且jQuery自動將第一層JSON反序列化時,您仍然留下了您手動構建的JSON字符串。

您應該返回List<T>作爲您的服務方法的返回值,並讓框架處理JSON序列化。

原來的答案:

假設對象仍包含在ASP.NET AJAX's ".d" wrapper,因爲你暗示:

for (var post in msg.d) {  
    var x = msg.d[post].Date; 

    alert(x); 
} 

或者說,傳統的循環,這可能是更直接:

for (var i = 0; i < msg.d.length; i++) { 
    var x = msg.d[i].Date; 

    alert(x); 
} 
+0

感謝戴夫,在閱讀您的文章後,我意識到我是雙序列化data.such一個愚蠢的錯誤。現在我能夠讀取值與msg.d [0] .Date.But有另一個問題。基本上在代碼背後的Web方法我有不同的條件。根據條件不同的通用列表(ex.faqs,recognitions等)返回給Jquery ajax方法。我不明白我怎麼能設置Web的返回類型(通用列表)方法基於使用您的解決方案的條件。以前我用來將從Converttojson返回的字符串追加到一個字符串生成器並返回。 – kranthi 2010-02-08 12:16:58

+0

使用IEnumerable作爲返回類型。 – 2010-02-08 13:23:38

+0

返回IEnumerable看起來像個好主意。在我的代碼中,我有一些必須從多個通用列表中檢索數據的條件。例如,如果條件滿足,我需要執行以下操作。 Recognitionfactory rf = new Recognitionfactory(); Recognitions rs = rf.getBasicSearchRecognitions(searchtext); Answerfactory af = new Answerfactory(); 答案ans = af.getBasicSearchAnswers(searchtext); 在上面的例子中,我需要在滿足一定條件時返回rs,ans(泛型列表)。我可以在兩種情況下返回它們嗎? – kranthi 2010-02-08 13:56:36

1

如果將此消息添加到您的ajax中,那麼這對您有幫助嗎?

dataFilter: function(data) 
      { 
       var msg; 
       if (typeof (JSON) !== 'undefined' && 
       typeof (JSON.parse) === 'function') 
        msg = JSON.parse(data); 
       else 
        msg = eval('(' + data + ')'); 
       if (msg.hasOwnProperty('d')) 
        return msg.d; 
       else 
        return msg; 
      }, 

注意,你再處理這個作爲味精,不msg.d像這樣:

success: function(msg) 
      { 
       SaveSuccess(msg); 
      }, 
0

看起來像你對我有對象開始的數組,用你的樣品以下工作:

messages = [{"AnsNo":0,"Answer":"","Category":"Help Centre.Mortgages.Existing customers","ClickURL":null,"ID":7,"Question":"How do I re-mortgage to you?","RecNo":0,"ValidFrom":"\/Date(-62135596800000+0000)\/","ValidUntill":"\/Date(-62135596800000+0000)\/"}] 

for(i in messages) 
{ 
    message = messages[i]; 
    //Says "Help Centre.Mortgages.Existing customers" 
    alert(message.Category) 
    //To get all key/value pairs 
    for(key in message) 
    { 
     //Alerts all key value pairs one by one 
     alert("Key:" + key + ", Value:" + message[key]); 
    } 
} 
相關問題