我通过AJAX调用一个动作方法并返回一个列表对象,我很难在JQuery中反序列化响应。我尝试通过$ .each函数迭代repsone,但我得到NULL。我肯定知道返回的数据包含一个对象。
[HttpPost]
public JsonResult ToolTips(string viewName)
{
List<ToolTipMvc.Models.ToolTipMvcModel> result = ToolTipMvc.Models.ToolTipMvcModel.GetToolTip(viewName);
var y = result;
JavaScriptSerializer jss = new JavaScriptSerializer();
string output = jss.Serialize(result);
return Json(output);
}
public static List<ToolTipMvcModel> GetToolTip(string viewName)
{
List<ToolTipMvcModel> items = new List<ToolTipMvcModel>();
//items.AddRange(toolTipIds.Select(s => GetToolTip(s)));
ToolTip tp = new ToolTip();
ToolTipMvcModel item = new ToolTipMvcModel();
item.Description = "list item 1";
item.Field = "ctrlOne";
ToolTipMvcModel item2 = new ToolTipMvcModel();
item.Description = "list item 2";
item.Field = "ctrlTwo";
items.Add(item);
return items;
}
$.ajax({
type: 'POST',
url: toolTipsUrl,
cache: false,
datatype: "html",
data: { viewname: "runCreate" },
success: function (data) {
alert(data);
data = JSON.parse(data);
alert(data);
$.each(data, function (dt) {
var mydata = data.Field;
alert(mydata);
});
}
修改
当我提醒数据时,我看到了例如返回的JSON
[{“Field:”ctrlTwo“,”Description“:”List item 2“},{”Field:“ctrlTwo”,“Description”:“List item 2”}]
但是当我使用JSON.Parse(数据)或$ .parseJson(数据)时,我看到了对象对象。我只是想通过并填充页面上的一些文本区域
答案 0 :(得分:2)
首先,没有必要自己明确使用JavaScriptSerializer
。对Json
的调用将为您序列化,因此请将控制器方法看起来像这样:
[HttpPost]
public JsonResult ToolTips(string viewName)
{
List<ToolTipMvc.Models.ToolTipMvcModel> result = ToolTipMvc.Models.ToolTipMvcModel.GetToolTip(viewName);
return Json(result);
}
这样做也意味着您不需要执行任何明确的JSON.Parse
或$.parseJson
。
在success
处理程序中,您应该能够按如下方式遍历结果:
success: function(data) {
for (var i = 0; i < data.length; i++) {
var item = data[i];
console.log(item.Description);
console.log(item.Field);
}
}