尽管代码返回正确的数据,但Ajax调用返回空响应

时间:2015-08-19 20:40:55

标签: javascript c# jquery asp.net ajax

我做了类似的事情:

 $.ajax({
    type: 'POST',
    dataType: 'json',
    contentType: 'application/json',
    url: '/Modal/getModalInfo',
    data: '{"machine":"' + machine + '"}',
    success: function (response) {
        modalData = response;
        fillModal();
    }
});

如果我调试C#并检查发送回JS的响应,那么数据看起来完全正确。

Ajax调用中的响应只是:

response = Object {}

并完全清空。我正在以正确执行的相同方式执行其他几个Ajax调用。

编辑:

就C#返回Ajax而言:

        try {
            return Json(allInfo, JsonRequestBehavior.AllowGet);
        }
        catch (Exception ex) {
            return new JsonResult();
        }

" allinfo"看起来像:

    AllTheInfo allInfo = new AllTheInfo();


    class AllTheInfo {
    List<DownTimes> dList;

    internal List<DownTimes> DList {
        get { return dList; }
        set { dList = value; }
    }
    List<PartsMade> pList;

    internal List<PartsMade> PList {
        get { return pList; }
        set { pList = value; }
    }

    PartsTotals pTotal;

    internal PartsTotals PTotal {
        get { return pTotal; }
        set { pTotal = value; }
    }
}

该类中引用的类是我已经制作的其他自定义类。

编辑:我还修改了我的Ajax调用以捕获错误,它似乎并没有认为有任何错误,只是一个空的成功响应。

再次编辑:我现在尝试使用以下内容转换我在C#中返回Json字符串的对象:

        string jsontext = "";
        try {
            jsontext = JsonConvert.SerializeObject(allInfo);

            System.IO.File.WriteAllText(path, jsontext);
        }
        catch (Exception ex) {
            Console.WriteLine(ex.Message);
        }

现在的问题是对JsonConvert的调用成功完成(没有错误被捕获)但字符串等于&#34; {}&#34;

我不确定为什么这会被解释为成功。

2 个答案:

答案 0 :(得分:0)

过去,当客户端由于语法错误,响应中的其他文本(例如HTML标签等)而无法解析从服务器返回的JSON时,我已经看到了这一点。最好的办法是使用类似Fiddler(http://www.telerik.com/fiddler)或类似代理的内容,以确切了解回复中的内容(不仅仅是您从C#端返回的内容,因为可能还有其他内容)在离开服务器端方法后影响输出的过滤器,模块等。)

答案 1 :(得分:0)

我用来创建我传回Ajax的最终对象的5个不同的类有getter和setter,其中一个类的getter / setter标记为:

internal List<PartsMade> PList {
        get { return pList; }
        set { pList = value; }
    }

并且应该标记为:

public List<PartsMade> PList {
        get { return pList; }
        set { pList = value; }
    }

这导致C#中的Json序列化程序无法通过getter访问类。

将getter的访问修饰符更改为public后输出正确。