Json不发送数据

时间:2015-07-21 15:43:42

标签: c# jquery asp.net ajax json

我和Json有一些奇怪的问题。

我正在对一个Controller方法进行ajax调用,该方法将一个字符串作为输入并发回一个我的类的List。

基本上,我正在更改下拉菜单进行json调用,以加载另一个下拉菜单的相应字段。

在下拉菜单1中,我有2个选项和一个占位符(“选择”)。

奇怪的是,当我选择2选项时,它将数据添加到下拉菜单2.但是如果我选择选项1,那么它不会在json调用中获取数据,因此不会添加任何内容到下拉菜单2,虽然我的控制器功能是在json中返回数据。

我的json电话如下:

function changeTable() {
            var index = 0;
            var info = { majoraccountvalue: document.getElementById("expancesMajorAccount").value };
            var dropdowm = $("#expancesMinorAccountName");
            jQuery.ajax({
                type: "POST",
                url: "@Url.Action("GetData")",
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify(info),
                success: function (data) {
                    debugger;
                    var arr = data.MinorAccountHeads;
                    dropdowm.empty()
                    alert(data);

                    for (index = 0; index < arr.length; index++) {
                        dropdowm.append($('<option></option>').val(arr[index].ID).html(arr[index].Name));
                    }
                },
                failure: function (errMsg) {
                    alert(errMsg);
                }
            });
        }

我的控制器方法是:

public JsonResult GetData(long majoraccountvalue)
     {
         Myclass model = new myclass();
         model.FillData(majoraccountvalue);
         return Json(new { model.MinorAccountHeads });
     }

我的控制器功能在两种情况下都返回数据。当我选择选项1以及选择选项2时。

由于

2 个答案:

答案 0 :(得分:1)

我能够解决错误。因为,这个人亲自认识我,我能够帮助他解决它。

基本上,问题在于函数发送的数据的序列化:public JsonResult GetData(long majoraccountvalue)

该函数通过序列化自定义数据库entites对象的model.MinorAccountHeads列表来返回Json数据。

使用上面的方法代码进行序列化时有一个自引用循环。

我能够通过使用Newtonsoft.json库更改方法来解决它:     公共对象GetData(long majoraccountvalue)     {         Myclass model = new myclass();         model.FillData(majoraccountvalue);         return JsonConvert.SerializeObject(model.MinorAccountHeads);     }

答案 1 :(得分:0)

  1. 尝试在ajax参数中使用cache:false。
  2. 失败 - 不正确。您需要使用&#39;错误&#39;。可能是您收到错误的第一个请求......