2009-08-07 105 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