2014-06-26 10 views
2

我有一個AJAX調用,它調用一個控制器。此控制器返回以下JSON:迭代JSON列表導致出現「錯誤:語法錯誤,無法識別的表達式」

{"officeProducts":"[{\"Id\":96,\"MyProperty\":null,\"Enabled\":true,\"Envelope\":{\"Id\":1,\"Quality\":\"God\",\"PaperSize\":\"A4\",\"Type\":\"Window\"}},{\"Id\":169,\"MyProperty\":null,\"Enabled\":true,\"Envelope\":{\"Id\":1,\"Quality\":\"God\",\"PaperSize\":\"A4\",\"Type\":\"Window\"}},{\"Id\":174,\"MyProperty\":null,\"Enabled\":true,\"Envelope\":{\"Id\":1,\"Quality\":\"God\",\"PaperSize\":\"A4\",\"Type\":\"Window\"}},{\"Id\":175,\"MyProperty\":null,\"Enabled\":true,\"Envelope\":{\"Id\":1,\"Quality\":\"God\",\"PaperSize\":\"A4\",\"Type\":\"Window\"}}]"} 

現在我想迭代列表。所以我基本上想要迭代officeProducts

我有下面的代碼,在那裏我明明做錯事,因爲我得到一個:

錯誤:

Error: Syntax error, unrecognized expression: [{"Id":96,"MyProperty":null,"Enabled":true,"Envelope":{"Id":1,"Quality":"God","PaperSize":"A4","Type":"Window"}},{"Id":169,"MyProperty":null,"Enabled":true,"Envelope":{"Id":1,"Quality":"God","PaperSize":"A4","Type":"Window"}},{"Id":174,"MyProperty":null,"Enabled":true,"Envelope":{"Id":1,"Quality":"God","PaperSize":"A4","Type":"Window"}},{"Id":175,"MyProperty":null,"Enabled":true,"Envelope":{"Id":1,"Quality":"God","PaperSize":"A4","Type":"Window"}}] 

我的AJAX調用:

self.updateOfficeProducts = function() { 
    $.ajax({ 
     url: '/SingleLetter/GetOfficeProducts', 
     type: 'POST', 
     data: { 
      'country': self.countryId 
     }, 
     dataType: 'json', 
     success: function (data) { 
      console.log(data.officeProducts); 

      $(data.officeProducts).each(function (index, ele) { 
       alert(ele.Id); 
      }); 
     } 
    }); 
}; 

,所以我期望迭代4個不同的對象,在那裏我可以說像ele.Idele.Enabled。相反,我得到我的語法錯誤。

我在做什麼錯? :-)顯然是一些語法的東西。

回答

4

使用JSON.parse -

success: function (data) { 
    data = JSON.parse(data); 
    $(data.officeProducts).each(function (index, ele) { 
     alert(ele.Id); 
    }); 
    ... 

編輯

另一件事 - 我不知道.NET的,但你要回響應是阿賈克斯期望的格式不。該字符串沒有正確的json編碼。

你有前後[]後去除",因此字符串會是─

var a = '{"officeProducts": [{\"Id\":96,\"MyProperty\":null,\"Enabled\":true,\"Envelope\":{\"Id\":1,\"Quality\":\"God\",\"PaperSize\":\"A4\",\"Type\":\"Window\"}}] }'; 
//       ^here                               and here^   

JSFiddle

希望有所幫助。

+0

嗨。如果我使用「JSON.parse」或「$。parse」,我會得到: 「SyntaxError:JSON.parse:JSON數據第1行第2列的意外字符」 –

+0

您可能不會從PHP發送數據以正確的形式。如果你在那裏做一個數據庫查詢並返回響應就這樣做 - 將所有東西存儲在'stdClass/Array'中,然後從PHP返回'json_encode($ result)',然後在js中返回'JSON.parse(data )'會正確獲取結果 –

+0

嗯,我已經這樣做了。我使用C#/ .NET,我的代碼是:return Json(new { officeProducts = JsonConvert.SerializeObject(models) }); (與json_encode相同) –

相關問題