Получение данных из JSON с использованием Javascript - PullRequest
1 голос
/ 07 мая 2009

Хорошо, у меня есть вывод json, который выглядит следующим образом:

{"Result" : [
              {
                "Id" : "5214",
                "ParentReasonId" : "0",
                "Description" : "Billing & Payment",
                "SysName" : "Billing & Payment",
                "SysCategory" : "Billing & Payment",
                "ClientId" : "924",
                "DispositionCount" : "6",
                "IsActive" : true,
                "ChildReasonCount" : "8",
                "Attributes" : [],
                "SortOrder" : "0",
                "CreatedBy" : null
              }
            ]
 }

И я хотел бы извлечь данные для идентификатора и описания из этого.

    jQuery("#chained_child").cascade("#chained", {
    ajax: { url: 'Customhandler.ashx?List=MyList' },
        template: commonTemplate,
        match: commonMatch
    });

function commonTemplate(item) {
    return "<option Value='" + item.Result.Id + "'>" 
           + item.Result.Description + "</option>";
};

Но из-за своей жизни я не могу заставить ее вернуть значение, которое я ищу. Я знаю, что это что-то нубистское, но я бью стену. Кто-нибудь может помочь?

Ответы [ 6 ]

6 голосов
/ 07 мая 2009

Если вы изучите вашу строку JSON, ваш Result объект на самом деле будет массивом размера 1, содержащим объект, а не просто объект. Вы должны удалить лишние скобки или обратиться к вашей переменной, используя:

item.Result[0].Id

Для ссылки на вашу переменную с помощью item.Result.Id вам потребуется следующая строка JSON:

{
    "Result" :
    {
        "Id" : "5214",
        "ParentReasonId" : "0",
        "Description" : "Billing & Payment",
        "SysName" : "Billing & Payment",
        "SysCategory" : "Billing & Payment",
        "ClientId" : "924",
        "DispositionCount" : "6",
        "IsActive" : true,
        "ChildReasonCount" : "8",
        "Attributes" : [],
        "SortOrder" : "0",
        "CreatedBy" : null
    }
}
1 голос
/ 07 мая 2009

Ionut G. Stan ответ правильный. Ваш вывод в формате json не соответствует формату для каскадного плагина.

Если вы не хотите менять свой json, вы можете использовать опцию dataFilter в настройках ajax для дополнения данных.

Я настроил рабочую демонстрацию здесь: http://jsbin.com/ebohe (редактируется через http://jsbin.com/ebohe/edit)

Вот соответствующий javascript:

$(function(){
  $('#chained_child').cascade(
    '#chained',
    {
      ajax: {
        url: 'Customhandler.ashx?List=MyList',
        dataFilter: extractResult
      },
      template: customTemplate,
      match: customMatch
    }
  );

  function extractResult(data) {
    return eval('(' + data + ')').Result;
  }

  function customTemplate(item) {
    return $('<option />')
      .val(item.Id)
      .text(item.Description);
  }

  function customMatch(selectedValue) {
    return this.ParentReasonId == selectedValue;
  }
});
1 голос
/ 07 мая 2009

Насколько я вижу на странице плагина , аргумент, посылаемый в обратный вызов шаблона, item из ответа JSON, который является массивом. Ваш ответ JSON является объектом. Я полагаю, вы не отправляете правильный ответ JSON. Но возьмите это с крошкой соли, так как я никогда не использовал этот плагин.

В любом случае, если я прав, ваш ответ должен быть:

[
    {
        "Result" :
        {
            "Id" : "5214",
            "ParentReasonId" : "0",
            "Description" : "Billing & Payment",
            "SysName" : "Billing & Payment",
            "SysCategory" : "Billing & Payment",
            "ClientId" : "924",
            "DispositionCount" : "6",
            "IsActive" : true,
            "ChildReasonCount" : "8",
            "Attributes" : [],
            "SortOrder" : "0",
            "CreatedBy" : null
        }
    }
]
1 голос
/ 07 мая 2009

item.Result [0]. Идентификатор работает, как упомянул Себастьян, - но работает, только если «элементу» действительно присвоено значение. Я думаю, это не так.

В вашей функции commonTemplate попробуйте сделать console.log (item) и посмотреть, каков будет результат.

1 голос
/ 07 мая 2009

Одна вещь, которая мне очень помогла с JSON funkyness, это установка точек останова в Firebug , которая позволяет вам шагать через полученный объект и просматривать его структуру.

0 голосов
/ 07 мая 2009

Возможно, вы захотите взглянуть на этот учебник JSON от IBM:

Освоение Ajax, часть 10. Использование JSON для передачи данных

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