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是成功完成(没有错误被捕获),但字符串等于"{}"
我不知道为什么这将被解释为成功。
我在过去看到过这种情况,当客户端由于语法错误、响应中的附加文本(例如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后,输出是正确的。