2012-07-27 49 views
1

我使用sammy.js和ASP.NET MVC後端。我有一個這樣的路線:Sammy.js不理解我的json?

 this.get("#/member/inbox", function (context) { 
      this.load('CurrentUser/Messages') 
      .then(function (items) { 
       $.each(items, function (i, item) { 
        context.log(item.Subject, '-', item.Text); 
       }); 
      }); 

但item.Subject和item.Text是未定義的。我的JSON看起來是這樣的:

[{"Text":"Lorem ipsum","Created":"\/Date(1343375945089)\/","Subject":"test"},{"Text":"testext","Created":"\/Date(1343375945089)\/","Subject":"test2"}] 

如果我交流這個-負載到$一個電話。獲得它的工作原理,但我想這樣做「的薩米方式」 任何想法?

回答

0

我有同樣的問題。我發現sammy會正確加載保存爲.json的本地文件。但是即使使用(「Content-type」,「application/json」),任何從http調用的內容都不起作用

您可以通過將自己的api json feed複製/粘貼到文件中來測試自己的設置。 然後看看sammy是否能夠正確加載它。

this.get('#/contact', function(context) { 
    $('#header').html('This is the Contact Page') 
     this.load('Backboneapp_data.json') 
     .then(function(items) { 
      $.each(items, function(i, item) { 
       context.log(item); 
      }); 
     }); 

    }); 
0

好了,我改變了sammy.js 線1535從:

dataType: is_json ? 'json' : 'text' 

到:

dataType: is_json ? 'json' : null 

現在森美瞭解到,內容是JSON,不知道爲什麼,在這一刻。

+0

修改你的問題,而不是用黑客回答自己的問題 – 2012-07-27 08:19:47

1

你確定「items」是一個數組嗎?快速檢查console.log(items)並看看你得到了什麼。有可能數組並不是頂層的東西,而是有一個包裝對象來保存數組,這樣當你的JSON到達瀏覽器時,實際上看起來更像這樣(注意對象和「d 「屬性):

{"d": [{"Text":"Lorem ipsum","Created":"\/Date(1343375945089)\/","Subject":"test"},{"Text":"testext","Created":"\/Date(1343375945089)\/","Subject":"test2"}]} 
1

你的腳本生成JSON應該在HTTP Content-type設置爲application/jsontext/json

對於ASP.NET,這將是:

Response.ContentType = "application/json"; 

Response.Headers.Add("Content-type", "application/json"); 
0

在這些情況下,Sammy代碼中肯定會有一些改進。當我遇到這種情況時我所做的是使用

var jsonItems = $.parseJSON(items); 

這將從響應生成適當的JSON對象。