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

本文关键字:返回 代码 数据 调用 响应 Ajax | 更新日期: 2023-09-27 18:09:00

我要做的是:

 $.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调用捕捉错误,它似乎不认为有任何错误,再次,只是一个空的成功响应。

再次编辑:我现在试图转换的对象,我返回到一个Json字符串内c#使用以下:

        string jsontext = "";
        try {
            jsontext = JsonConvert.SerializeObject(allInfo);
            System.IO.File.WriteAllText(path, jsontext);
        }
        catch (Exception ex) {
            Console.WriteLine(ex.Message);
        }

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

我不知道为什么这将被解释为成功。

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

我在过去看到过这种情况,当客户端由于语法错误、响应中的附加文本(例如HTML标签等)而无法解析从服务器返回的JSON时。最好的方法是使用Fiddler (http://www.telerik.com/fiddler)或类似的代理来查看响应中返回的内容(不仅仅是您从c#端返回的内容,因为可能有额外的过滤器,模块等在输出离开服务器端方法后影响输出)。

用于创建返回给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后,输出是正确的。