代码之家  ›  专栏  ›  技术社区  ›  James Allen

使用jquery迭代JSON集合会迭代数据字符串的字符

  •  2
  • James Allen  · 技术社区  · 17 年前

    我正在使用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应该将其作为一个集合来分析,并且应该只迭代两次以向我显示警报,每辆车一个警报。然后我可以执行alert(car.make)来显示make,但是如果我尝试这样做,我将得到未定义(因为字符串没有make属性)。

    我做错什么了?感谢您的帮助,一定有明显的错误,但我保证我已经做了大量的谷歌搜索,没有发现任何问题!:)

    3 回复  |  直到 17 年前
        1
  •  6
  •   Nick Riggs    17 年前

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

    $.post("/Home/GetCars", null, 
        function(cars)
        {
             $(cars).each(function() {
                 alert(this); //this should point to the car. 
             });
        },
       "json"
    );
    
        2
  •  1
  •   Sean Clark Hess    17 年前

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

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

    或者添加“json”作为post的最后一个参数

        3
  •  0
  •   andres descalzo    17 年前

    link text

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