【问题标题】:Ajax call returning empty response despite code behind returning correct data尽管代码返回正确数据,但 Ajax 调用返回空响应
【发布时间】:2015-08-19 20:40:55
【问题描述】:

我正在做类似的事情:

 $.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 的调用成功完成(没有捕获到错误)但是字符串等于“{}”

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

【问题讨论】:

  • 您在“网络”选项卡中看到了什么?
  • 你能发布到 getModalInfo 操作代码吗?
  • 该函数太大且与上下文无关,无法发布所有内容,但我将添加一些代码来说明 getModalInfo() 返回的内容。
  • 默认 Json() 很糟糕,尤其是如果你有字典,你可以尝试使用 newsoft json
  • 问题是这与我使用 Json() 将数据返回到其他 Ajax 调用的方式相同。

标签: javascript c# jquery asp.net ajax


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我用来创建最终传递回 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 后输出正确。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 2018-06-08
      • 1970-01-01
      相关资源
      最近更新 更多