1

Asp.Net WebAPI OData の RC で JayData の最新バージョンを使用しています。JavaScript 関数を実行してサーバーからデータをフェッチすると、JSON データでリクエストとレスポンスを確認できます。ただし、.then() 関数は起動しないため、UI はサーバーからデータが返されたことを認識しません。

これが私の JayData 呼び出しです。

(function(root) {
    var context = new Default.Container({
        name: 'oData',
        oDataServiceHost: '../api/transactions'
    });

    $(function() {
        context.TransactionsByMonth.take(5).toArray().then(function(transactions) {
            transactions.forEach(function (transaction) {
                alert('Test');
            });
        });
    });
}(window));

応答ヘッダーは次のとおりです。

応答ヘッダー Cache-Control no-cache Content-Length 1811 Content-Type application/json Date Fri, 21 Dec 2012 08:32:58 GMT Expires -1 Pragma no-cache Server Microsoft-IIS/8.0 X-AspNet-Version 4.0。 30319 X-Powered-By ASP.NET X-SourceFiles =?UTF-8?B?YzpcdXNlcnNcanVzdGluXGRvY3VtZW50c1x2aXN1YWwgc3R1ZGlvIDIwMTJcUHJvamVjdHNcVHJlYXNTdXJlLldlYlxUcmVhc1N1cmUuV2ViXGFwaVx0cmFuc2FjdGlvbnNcVHJhbnNhY3Rpb25zQnlNb250aA==?= Request Headers Accept application/atomsvc​​+xml;q=0.8, application/json;odata=verbose;q=0.5, /;q=0.1 Accept-Encoding gzip, deflate Accept-Language en-US,en;q=0.5 接続キープアライブ Cookie glimpseState=null; glimpseLatestVersion=0.87; glimpseOptions=null; glimpseClientName=null ホスト localhost:42039 MaxDataServiceVersion 2.0 リファラー http://{localhost}/dashboard/test ユーザーエージェント Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0

応答は次のとおりです。

[
  {
    "TransactionByMonthId": 1,
    "BeginningBalanceAmount": 5970.0,
    "FloatAmount": 8027.0,
    "InflowsAmount": 8607.0,
    "OutflowsAmount": -2057.0,
    "EndingBalanceAmount": 33345.0,
    "MonthOfYear": 12,
    "MonthOfYearName": "MonthOfYearName6136f9ba-95c3-4977-ab29-5ec2e2968c5f",
    "QuarterOfYear": 8,
    "YearNumber": 2012
  },
  {
    "TransactionByMonthId": 10,
    "BeginningBalanceAmount": 9201.0,
    "FloatAmount": 4723.0,
    "InflowsAmount": 4933.0,
    "OutflowsAmount": -2808.0,
    "EndingBalanceAmount": 9858.0,
    "MonthOfYear": 11,
    "MonthOfYearName": "MonthOfYearName7c407e0d-d730-43c3-aff6-d3e56313f992",
    "QuarterOfYear": 17,
    "YearNumber": 2012
  },
  {
    "TransactionByMonthId": 19,
    "BeginningBalanceAmount": 3151.0,
    "FloatAmount": 19.0,
    "InflowsAmount": 9340.0,
    "OutflowsAmount": -6118.0,
    "EndingBalanceAmount": 19958.0,
    "MonthOfYear": 10,
    "MonthOfYearName": "MonthOfYearName504ded96-a4e3-4492-ae22-98da7c9c2ba1",
    "QuarterOfYear": 26,
    "YearNumber": 2012
  },
  {
    "TransactionByMonthId": 28,
    "BeginningBalanceAmount": 3826.0,
    "FloatAmount": 7120.0,
    "InflowsAmount": 3341.0,
    "OutflowsAmount": -9360.0,
    "EndingBalanceAmount": 33617.0,
    "MonthOfYear": 9,
    "MonthOfYearName": "MonthOfYearName5fa907a3-b6a3-4a42-a53b-2229da6e1dc6",
    "QuarterOfYear": 35,
    "YearNumber": 2012
  },
  {
    "TransactionByMonthId": 37,
    "BeginningBalanceAmount": 6832.0,
    "FloatAmount": 4412.0,
    "InflowsAmount": 2462.0,
    "OutflowsAmount": -3726.0,
    "EndingBalanceAmount": 40857.0,
    "MonthOfYear": 8,
    "MonthOfYearName": "MonthOfYearNameb3f6a899-6201-418a-b020-31babb42123b",
    "QuarterOfYear": 44,
    "YearNumber": 2012
  }
]
4

2 に答える 2

1

確認する必要があるのは次の 2 点です。

jquery または q が必要

promise インターフェイス (then/fail) を使用する場合は、jquery または q.js を promise 実装として含める必要があります (JayData には独自の promise 実装がありません)。q.js を使用する場合は、promise アダプターとして jaydatamodules/qdeferred.js も含める必要があります (これは jquery とは関係ありません)。

与えられた応答は OData ではなく WebAPI です

コピーした応答ペイロードは OData ではありません。単純な WebAPI 応答からのものである必要があります。したがって、この形式の OData プロバイダーではなく、JayData の WebAPI プロバイダーが必要です。ASP.NET WebAPI OData パッケージを使用している場合、何かが正しく配線されていません。このパッケージは、WebAPI 応答ペイロード形式をその OData の形式に変更します。

于 2012-12-24T08:31:12.183 に答える
0

失敗したブランチもキャッチしてログに記録してください。.then().fail(function(reason){console.log(reason);})また、chromeを使用すると、例外が発生した場合にキャッチできるので、それも試してください。

于 2012-12-21T09:17:22.560 に答える