使用JQuery迭代Json集合迭代数据字符串的字符

时间:2009-08-07 17:30:28

标签: jquery asp.net-mvc json iteration

我正在使用ASP.MVC 1来返回IEnumerable对象(例如,Cars):

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);
         });
    }
);

当我运行时,第一个警告框显示:

对象的类型是字符串,内容是[{“Make”:“BMW”},{“Make”:“Ford”}]

这告诉我我得到一个字符串(我不应该得到一个对象?),包含一个带有2个对象的Json结构。然而,jquery $ .each函数然后继续迭代字符串中的每个字符,所以我得到46个警告框:第一个显示'[',然后'{',然后''',然后是'M',然后是'a ',然后'k'......你明白了。

根据我的阅读,jQuery应该将其解析为一个集合,并且应该只迭代两次以向我显示警报,每个汽车一个。然后我可以做警告(car.Make)来显示品牌,但如果我尝试我得到未定义(因为字符串没有Make属性)。

我做错了什么?感谢任何帮助,肯定有一个明显的错误,但我保证我已经做了很多谷歌搜索,并没有得到任何东西! :)

3 个答案:

答案 0 :(得分:6)

尝试添加“json”类型作为$ .post()方法中的最后一个参数。另外,我认为你可以简化你的每个陈述:

$.post("/Home/GetCars", null, 
    function(cars)
    {
         $(cars).each(function() {
             alert(this); //this should point to the car. 
         });
    },
   "json"
);

答案 1 :(得分:1)

你忘了告诉jquery将结果解释为json。默认情况下,$ .post只返回一个数据字符串。您可以使用以下选项之一。然后,当你迭代时,它们将成为对象。

http://docs.jquery.com/Ajax/jQuery.getJSON

或添加“json”作为发布的最后一个参数

答案 2 :(得分:0)

link text

$.post("/Home/GetCars", null, 
    function(cars)
    {
         $.each(cars, function() {
              alert(this.Make);
         });
    },
   "json"
);
相关问题