Как разобрать возвращенный объект из метода обратного вызова «success» в JQuery, используя AJAX - PullRequest
1 голос
/ 07 сентября 2010

У меня есть этот стандартный код для получения класса из веб-службы:


function getStuff() {
  var callParams = "{'param1':'" + "oren"  + "'}"
  $.ajax({
  type: "POST",
  url: "http://192.168.5.223:8989/TolunaAPI.asmx/GetDummyType",
  data: callParams,
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function (data) {
    alert(data);
  ....

Это дает предупреждение, которое гласит: [объект объекта].
Я попытался прочитать некоторые похожие посты здесь и в документации по JQuery, но не могу понять, что именно является объектом «данных».
Веб-служба возвращает объект с именем DummyType:

<code>
public class DummyType
    {
       public ErrorTypes error;
       public NestedDummyType nested;
       public DummyType() { }
       public DummyType(string paramName)
       {
           error = ErrorTypes.None;
           nested = new NestedDummyType();
       }
    }
}

У которого, как вы видите, есть еще один объект, а именно NestedDummyType:

public class NestedDummyType
    {
       public string nestedString;
       public int nestedInt;
       public NestedDummyType()
        {
            nestedString = "Hello from nested";
            nestedInt = -1;
        }
    }

Все они должны быть возвращены в формате json, но, как уже упоминалось, я не могу интерпретировать полученные данные.
Как это сделать?
Спасибо.

Ответы [ 4 ]

3 голосов
/ 07 сентября 2010

Вы должны быть в состоянии сделать это (.d, потому что вы находитесь в .Net):

alert(data.d.nested.nestedString);

Вы получаете доступ к объекту так же, как в C #, просто делая черезсвойства.Объект d - это DummyType, который вы передаете обратно, поэтому просто получите доступ к свойствам на нем, так же, как они названы в типе C # на сервере, вот как они сериализуются для клиента.

Если по какой-то причине я что-то скрыл, и это не работает, удалите .d, но это не должно иметь место.

1 голос
/ 07 сентября 2010

Если ваш серверный скрипт эффективно возвращает правильно сформированный JSON, jquery автоматически проанализирует его, и объект данных будет содержать проанализированный объект, то есть ваш объект NestedDummyType. Вы пытались сделать что-то подобное в вашем успешном обратном вызове?

success: function (data) {
    alert(data.nested.nestedString);
    alert(data.nested.nestedInt)
}
1 голос
/ 07 сентября 2010

Итак, если вы сделаете это:

success: function (data) { 
    alert(data.nestedInt)'
    alert(data.NestedDummyType.nestedString);
...

вы получите то, что ожидаете?

РЕДАКТИРОВАТЬ: На всякий случай, если у вас asp.net, 2.0 и 3.5 возвращают разные значения вданные и эта функция анализа в dataFilter решат эту проблему и будут работать с обеими версиями:

   $.ajaxSetup({
        data: "{}",
        datatype: "json",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        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;
        },
        error: function(xhr, textStatus, errorThrown)
        {
  //handle errors
        }
    });
0 голосов
/ 07 сентября 2010

Вот небольшой полезный фрагмент, который я использую в javascript, когда хочу узнать об объекте.

var s = "";
for(x in data)
  s += x + "=" + data[x] + "\r\n";
alert(s);

Он предупредит все методы / свойства объекта data, но не рекурсивнотак что вы ничего не увидите от nested.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...