2009-08-07 107 views
2

我使用ASP.MVC 1返回对象的IEnumerable(比如汽车)的Json集合:迭代使用JQuery遍历数据字符串的字符

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

当我运行这个,第一个警报b牛说:

类型的对象是字符串,内容是[{“做”:“宝马”},{“做”:“福特”}]

还告诉我,我得到一个字符串返回(我不应该得到一个对象?),包含一个2对象的Json结构。但是jQuery的$。每个函数然后继续遍历字符串中的每个字符,所以我得到46个警报框:第一个说,“[”,然后“{”,那么““”,然后‘M’,那么'一',然后'k'...你有这个想法

从我读到的,jQuery应该解析这个作为一个集合,并且应该只重复两次,以显示我警报,每个车一个。然后可以做alert(car.Make)来显示制作,但是如果我尝试获取undefined(因为字符串没有Make属性)。是一个明显的错误,但我保证我已经做了第一google搜索的大量的东西就没有想出了!:)

回答

6

Tr的Ÿ添加类型“json的”如在$。员额()方法的最后一个参数。另外,我认为你可以简化你的每条语句:

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

谢谢,这并获得成功! – 2009-08-07 19:50:36

+0

我试图用你的代码, 集合时有一个元素它的工作。 但是当collecion有多个值时, 回调函数dosnt执行 – Kobi 2014-04-19 17:45:53

1

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

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

或者加上 “JSON” 作为最后一个参数后

+0

您得到了与Nick相同的答案,但他首先到达那里,因此我将其标记为答案:(感谢您的回复! – 2009-08-07 19:51:45

0

link text

$.post("/Home/GetCars", null, 
    function(cars) 
    { 
     $.each(cars, function() { 
       alert(this.Make); 
     }); 
    }, 
    "json" 
); 
+0

谢谢我错过了“JSON”(试过一次,没有工作,然后我重新阅读的答复,并意识到我是有错的地方,$。每个呼叫后) – 2009-08-07 19:53:48