带有WebAPI和OData的JayData不运行回调

时间:2012-12-21 08:36:57

标签: asp.net-web-api odata jaydata

我正在使用最新版本的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));

以下是回复标题:

响应标头 缓存控制无缓存 内容长度1811 Content-Type application / json 日期星期五,2012年12月21日08:32:58 GMT 到期-1 Pragma no-cache 服务器Microsoft-IIS / 8.0 X-AspNet-Version 4.0.30319 X-Powered-By ASP.NET X-SourceFiles =?UTF-8 2 B 4 YzpcdXNlcnNcanVzdGluXGRvY3VtZW50c1x2aXN1YWwgc3R1ZGlvIDIwMTJcUHJvamVjdHNcVHJlYXNTdXJlLldlYlxUcmVhc1N1cmUuV2ViXGFwaVx0cmFuc2FjdGlvbnNcVHJhbnNhY3Rpb25zQnlNb250aA ==?= 请求标题 接受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 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
  }
]

2 个答案:

答案 0 :(得分:1)

应该检查两件事:

jquery或q required

如果你想使用promise接口(然后/ 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的格式。

答案 1 :(得分:0)

请抓住并记录失败分支。 。然后() .fail(函数(原因){的console.log(原因);}) 如果发生任何异常,也可以使用chrome,所以请尝试。