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

this-load を $.get の呼び出しと交換すると動作しますが、これを「サミーな方法」で実行したいのですが、何かアイデアはありますか?

4

5 に答える 5

1

「アイテム」が配列であることは確かですか? 簡単なチェックは、console.log(items)何が得られるかを確認することです。配列はトップレベルのものではなく、配列を保持するラッパー オブジェクトが存在する可能性が高いため、JSON はブラウザーに表示されるまでに実際にこのように表示されます (オブジェクトと "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 を生成するスクリプトは、HTTPContent-typeapplication/jsonまたはに設定する必要があります。text/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

そして今、サミーはコンテンツがjsonであることを理解していますが、現時点で理由はわかりません。

于 2012-07-27T08:12:22.343 に答える
0

そのような場合、Sammy コードには間違いなく改善すべき点があります。このような状況になったときに私がすることは、

var jsonItems = $.parseJSON(items);

これにより、応答から適切な JSON オブジェクトが生成されます。

于 2013-04-10T19:25:07.623 に答える
0

同じ問題があります。sammy は .json として保存されたローカル ファイルを正しくロードすることがわかりました。ただし、http から呼び出されたものは ("Content-type", "application/json") でも機能しません。

独自の API json フィードをコピーしてファイルに貼り付けることで、独自のセットアップをテストできます。次に、サミーが正しくロードできるかどうかを確認します。

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 に答える