我使用ASP.MVC 1返回对象(比如汽车)的IEnumerable:
public class Car : Entity<Car>
{
public virtual string Make { get; set; }
public virtual double Length { get; set; }
public virtual string Colour { get; set; }
}如下所示:
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult GetRoutes()
{
IEnumerable<Car> cars = _carTask.GetCars();
return Json(cars);
}在我的页面中,我想迭代每一辆返回的汽车,所以我有这样的结果:
$.post("/Home/GetCars", null,
function(cars)
{
alert("type of object returned is " + typeof cars + ", content is " + cars);
$.each(routes, function()
{
alert(this);
});
}
);当我运行此命令时,第一个警告框显示:
object类型为string,内容为{"Make":"BMW"},{"Make":"Ford"}
这告诉我我得到了一个字符串(我不应该得到一个对象吗?),它包含一个带有2个对象的Json结构。然而,jquery $.each函数继续迭代字符串中的每个字符,所以我得到了46个警告框:第一个框显示'[',然后是'{',然后是'"',然后是'M',然后是'a',然后是‘k’……您明白了。
根据我所读到的内容,jQuery应该将其解析为一个集合,并且应该只迭代两次以显示警报,每辆车一次。然后,我可以使用alert(car.Make)来显示Make,但是如果我尝试这样做,我就不会被定义(因为字符串没有Make属性)。
我做错了什么?谢谢你的帮助,肯定有一个明显的错误,但我保证我已经做了大量的谷歌搜索,但什么也没有找到!:)
发布于 2009-08-07 17:34:19
尝试将"json“类型添加为$.post()方法中的最后一个参数。另外,我认为你可以简化你的each语句:
$.post("/Home/GetCars", null,
function(cars)
{
$(cars).each(function() {
alert(this); //this should point to the car.
});
},
"json"
);发布于 2009-08-07 17:35:29
您忘记告诉jquery将结果解释为json。默认情况下,$.post只返回一个数据字符串。您可以使用以下选项之一。然后,当你迭代时,它们将成为对象。
http://docs.jquery.com/Ajax/jQuery.getJSON
或者添加"json“作为post的最后一个参数
发布于 2009-08-07 17:59:12
link text
$.post("/Home/GetCars", null,
function(cars)
{
$.each(cars, function() {
alert(this.Make);
});
},
"json"
);https://stackoverflow.com/questions/1246014
复制相似问题