2010-02-04 3 views
1

Я следую this link для создания ретранслятора на стороне клиента.проблема в получении значения от Json ключевая ценность пара

По ссылке выше retrive значение из ключа пары значений Json мы можем использовать результат [я] .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.

Пожалуйста, помогите ..

Заранее спасибо.

Update:

От бэкэндом я возвращающегося общий список, а затем превратить его в 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 method.The вернулся JSon выглядит как строка, а не объект и, следовательно, я не могу получить какую-либо ценность из пары значений ключа Json.

+0

Не могли бы вы отправить то, что возвращается при вызове alert (msg.d)? – user113716

+0

получите firebug, поместите точку останова и посмотрите на различные значения в окне часов. Проверьте, что находится в сообщении, msg [post]. –

+0

Привет, Патрик, Ниже приведен пример того, что возвращается, когда я предупреждаю (msg.d) [{"AnsNo": 0, "Answer": "", "Category": "Help Centre.Mortgages.Existing клиенты »,« ClickURL »: null,« ID »: 7,« Вопрос »:« Как мне повторно заимствовать у вас? »,« RecNo »: 0,« ValidFrom »:« \/Date (-62135596800000 + 0000)) \/"," ValidUntill ":" \/Date (-62135596800000 + 0000) \/"}] , поэтому я пытаюсь использовать msg [post] .AnsNo, msg [post] .Answer, msg [post] .Category и т. д. – kranthi

ответ

1

Update:

Это звучит как вы дважды сериализуете данные на стороне сервера, возвращая строку 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

Спасибо Дэйв, прочитав сообщение, я понял, что я дважды сериализую данные. Такая глупая ошибка. Теперь я могу прочитать значение с помощью msg.d [0] .Date.But получил еще одну проблему. код за веб-методом У меня разные условия. При условии, что в JQuery ajax-метод возвращается другой общий список (ex.faqs, распознавания и т. д.). Я не понимаю, как установить тип возврата (общий список) для Web метод, основанный на условии с использованием вашего решения. Ранее я использовал, чтобы добавить строку, возвращенную из Converttojson, в stringbuilder и вернуть. – kranthi

+0

Использовать IEnumerable как возвращаемый тип. –

+0

Возвращение IEnumerable выглядит как отличная идея. В моем коде у меня есть некоторые условия, которые должны будут извлекать данные из нескольких общих списков. Например, если условие выполнено, мне нужно сделать следующее. Recognitionfactory rf = new Recognitionfactory(); Распознавания rs = rf.getBasicSearchRecognitions (searchtext); Answerfactory af = new Answerfactory(); Ответы ans = af.getBasicSearchAnswers (searchtext); В приведенном выше случае мне нужно вернуть оба rs, ans (общие списки) после выполнения определенного условия. Как я могу вернуть оба из них для одного условия? – kranthi

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]); 
    } 
} 
Смежные вопросы