1

我正在使用带有 ASP.NET MVC 后端的 sammy.js。我有一条看起来像这样的路线:

        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"}]

如果我通过调用 $.get 来交换这个负载,它可以工作,但我想用“sammy way”来做这个有什么想法吗?

4

5 回答 5

1

你确定“项目”是一个数组吗?快速检查一下console.log(items),看看你得到了什么。很可能数组不是顶级的东西,而是有一个包装对象保存数组,这样你的 JSON 在它进入浏览器时实际上看起来更像这样(注意 object 和“d “ 财产):

{"d": [{"Text":"Lorem ipsum","Created":"\/Date(1343375945089)\/","Subject":"test"},{"Text":"testext","Created":"\/Date(1343375945089)\/","Subject":"test2"}]}
于 2012-07-27T08:18:02.207 回答
1

生成 JSON 的脚本应将 HTTP 设置Content-typeapplication/jsontext/json

对于 ASP.NET,这将是:

Response.ContentType = "application/json"; 

或者

Response.Headers.Add("Content-type", "application/json"); 
于 2012-07-27T08:18:56.853 回答
0

好的,所以我将 sammy.js 中的第 1535 行从:

dataType: is_json ? 'json' : 'text'

到:

dataType: is_json ? 'json' : null

而现在sammy明白内容是json,此刻不知道为什么。

于 2012-07-27T08:12:22.343 回答
0

我有同样的问题。我发现 sammy 会正确加载保存为 .json 的本地文件。但是任何从 http 调用的东西都不能使用 ("Content-type", "application/json")

您可以通过将自己的 api json 提要复制/粘贴到文件中来测试自己的设置。然后看看 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);
            });
        });

    });
于 2012-07-27T14:01:52.957 回答
0

在这些情况下,Sammy 代码肯定有一些需要改进的地方。当我遇到这种情况时我会做的是使用

var jsonItems = $.parseJSON(items);

这将从响应中生成正确的 JSON 对象。

于 2013-04-10T19:25:07.623 回答