我在使用我的AJAX脚本中的C#MVC框架中的控制器返回的Object时遇到问题。
Ajax脚本:
function getRName(obj) {
$.ajax({
url: 'resourceNamePopup',
method: 'post',
data: { "search": obj.value },
dataType: 'json',
success: function (data) {
alert('success');
$.each(data.items, function (items) {
alert(items.displayName);
});
}
});
}
C#动作:
public ActionResult resourceNamePopup(string search)
{
List<ResourceName> rnList = new List<ResourceName>();
rnList = getResourceName(search);
return Json(rnList );
}
我现在收到此错误
http://localhost:52273/Scripts/jquery-1.10.2.js
第645栏第4行未处理的异常0x800a138f - JavaScript运行时错误:无法获取未定义或空引用的属性“长度”
答案 0 :(得分:0)
obj
似乎只是一个单一列表的无意义包装。您只需要向obj
添加一个项目,因此将其作为列表实际上没有任何用处。只需直接返回rnList
即可。然后在JS中直接循环data
。此外,您返回一个没有属性的Object列表这一事实意味着您的所有属性都没有被序列化为JSON,因为它使用被序列化的对象类型来决定在JSON中包含哪些内容。
这应该更好,更简单:
C#
public ActionResult resourceNamePopup(string search)
{
List<ResourceName> rnList = getResourceName(search);
return Json(rnList);
}
JS
function getRName(obj) {
$.ajax({
url: 'resourceNamePopup',
method: 'post',
data: { "search": obj.value },
dataType: 'json',
success: function (data) {
alert('success');
if (data != null || data.length == 0) {
$.each(data, function (index, item) {
alert(item.displayName);
});
}
else { alert("No results"); }
}
});
}
答案 1 :(得分:0)
我想指出两个问题
您无需添加到List<object>
$.each(data.items, function (items)
部分不正确
您需要返回rnList
(来自方法resourceNamePopup()
[另请使方法和属性名称以大写字母开头] )。
并在AJAX响应中使用:
function getRName(obj) {
$.ajax({
url: 'resourceNamePopup',
method: 'post',
data: { "search": obj.value },
dataType: 'json',
success: function (data) {
alert('success');
$.each(data, function (i) {
alert(data[i].displayName);
});
}
});
}