如何从json获取数据?

时间:2012-04-13 10:24:05

标签: c# javascript jquery json

我有控制器

var subCategories = m_listsRepository.GetSubCategories(id);
var items = subCategories.Select(x=>new MyDataNameAndId(){Id = x.Value, Name = x.Text});
return Json(items);

和ajax:

$.ajax({
        url: urlString,
        type: 'POST',
        data: JSON.stringify({ id: districtId }),
        dataType: 'json',
        contentType: 'application/json',
        cache: 'false',
        success: function (data) {
            alert("success");
            $.each(data, function (key, MyDataNameAndId) {
                alert(key);//== 0
                alert(MyDataNameAndId);// then throws
                $('select#ChangeOnsubCategoryId').append('<option value="0">Select One</option>');

                $.each(MyDataNameAndId, function (index, manager) {
                    $('select#ChangeOnsubCategoryId').append(
                            '<option value="' + manager.Id + '">'
                            + manager.Name +
                            '</option>');
                });
            });
        }
    });

我做错了什么?

更新 控制器工作。 警报( “成功”); - 是节目 警告(重点); - 显示0 警报(MyDataNameAndId); - 不显示。 我需要从select#ChangeOnsubCategoryId

中选择'select#ChangeOnsubCategoryId'选项

这是怎么回事?这个明白吗?

我不知道如何显示传递了json的内容

json string:

[{"Id":"53","Name":"футбол"}]

2 个答案:

答案 0 :(得分:0)

从你写的JSON输出中,我有点像这样重写:

$.ajax({
    url: urlString,
    type: 'POST',
    data: JSON.stringify({ id: districtId }),
    dataType: 'json',
    contentType: 'application/json',
    cache: 'false',
    success: function (data) {
        if (!data) return; // if data is empty, return

        var $select = $('select#ChangeOnsubCategoryId');
          // put the select element in a variable so you don't need to
          // jquery select it again

        $select.append('<option value="0">Select One</option>');
          // I guess you first want to add a "select one" option

        // data should be an array e.g. [{"Id":"53","Name":"футбол"}]
        $.each(data, function (key, manager) {
           // for each "manager" in the "data" array

           // manager should be an object in the data
           // array e.g. {"Id":"53","Name":"футбол"}
           // no need to for each it

           $select.append(
                    '<option value="' + manager.Id + '">'
                    + manager.Name +
                    '</option>');
             // add the manager in the select box
        });
    }
});

我假设的东西。使用javascript调试器(例如Chrome中的开发人员工具或Firefox中的Firebug)来检查从ajax调用中获得的值。将断点放在函数内部,然后观察数据变为什么(在这种情况下,它应该是包含Id和Name的对象数组)。

答案 1 :(得分:0)

$.each(MyDataNameAndId, function (index, manager) {
                $('select#ChangeOnsubCategoryId').append(
                        '<option value="' + manager.Id + '">'
                        + manager.Name +
                        '</option>');
            });

应该只是

$('select#ChangeOnsubCategoryId').append(
         '<option value="' + MyDataNameAndId.Id + '">'
         + MyDataNameAndId.Name +
         '</option>');

示例代码对我有用,没有例外,这让我相信返回的JSON有问题。检查它是否实际返回您发布的字符串。