Sammy.js不理解我的json

Sammy.js not understanding my json?

本文关键字:json 我的 不理解 js Sammy      更新时间:2024-03-29

我正在使用带有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);
                });
            });

但是项目。主题和项目。文本未定义。我的json看起来像这样:

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

如果我用对$.get的调用来交换这个负载,它会起作用,但我想"以同样的方式"这样做有什么想法吗?

您确定"items"是一个数组吗?一个快速检查是console.log(items),看看你得到了什么。数组很可能不是顶级的东西,而是有一个包装器对象来保存数组,这样当JSON到达浏览器时,它实际上看起来更像这样(注意对象和"d"属性):

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

生成JSON的脚本应该将HTTP Content-type设置为application/jsontext/json

对于ASP.NET,这将是:

Response.ContentType = "application/json"; 

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

我也有同样的问题。我发现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);
            });
        });
    });

好的,所以我更改了sammy.js中的1535行来自:

dataType: is_json ? 'json' : 'text'

至:

dataType: is_json ? 'json' : null

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

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

var jsonItems = $.parseJSON(items);

这将从响应中生成一个合适的JSON对象。