1

我正在使用最新版本的 JayData 和 RC for Asp.Net WebAPI OData。当我运行 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 Connection keep-alive Cookie glimpseState=null; 一瞥最新版本=0.87;一瞥选项=空;glimpseClientName=null Host localhost:42039 MaxDataServiceVersion 2.0 Referer http://{localhost}/dashboard/test User-Agent 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

有两点需要检查:

需要 jquery 或 q

如果你想使用 Promise 接口(then/fail),那么你应该包含 jquery 或 q.js 作为 Promise 实现(JayData 没有自己的 Promise 实现)。如果您使用 q.js,您还必须包含 jaydatamodules/qdeferred.js 作为 promise 适配器(这与 jquery 无关)。

给定的响应是 WebAPI 而不是 OData

您复制的响应负载不是 OData,它必须来自简单的 WebAPI 响应。因此,您需要 JayData 提供的 WebAPI 提供程序,而不是这种格式的 OData 提供程序。如果您使用的是 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 回答