如何使用Html / Javascript消费OData服务?

时间:2012-04-11 19:11:38

标签: javascript jquery odata breeze jaydata

我们的项目目前使用Silverlight来使用Odata服务。这使得生活变得非常简单,因为我们可以引用OData服务,从而为我们提供生成的服务引用/实体。

然而,我们是否应该转向Html(html5)进行讨论。如果我们做出这个改变,我想知道会发生什么。我们当然会利用像jQuery这样的框架。

  • 我主要关心的是如何通过JavaScript / jQuery使用相同的OData服务。
  • 我们如何反序列化/序列化从此OData服务返回的实体?
  • 我们的数据合约是否应该是硬编码的(如果是这样,这对我们来说真是不可接受)?

谢谢!

5 个答案:

答案 0 :(得分:16)

OData sources can return data as JSON因此,您的网页可以对您的数据进行XHR并将其作为JSON接收,然后将其反序列化为Javascript对象,以便您进行分离,操作或显示。

以下是一些可以帮助您入门的其他链接:

HTH。

答案 1 :(得分:11)

我们还制作了一个非常酷的小库Data.js (http://datajs.codeplex.com/),它可以显着加快来自JavaScript的OData消耗。以下是CoffeeScript中的示例:

success = (data) -> $("#searchResultsTemplate").tmpl(data).appendTo("#resultsArea")
error = (err) -> $("#resultsArea").text(JSON.stringify(err.message))

do ->
  $("#search").click(->
    OData.defaultHttpClient.enableJsonpCallback = true
    OData.read("http://odata.netflix.com/v2/Catalog/Titles?$top=5", success, error))

它生成的JavaScript:

 success = function(data) {
    return $("#searchResultsTemplate").tmpl(data).appendTo("#resultsArea");
  };

  error = function(err) {
    return $("#resultsArea").text(JSON.stringify(err.message));
  };

  (function() {
    return $("#search").click(function() {
      OData.defaultHttpClient.enableJsonpCallback = true;
      return OData.read("http://odata.netflix.com/v2/Catalog/Titles?$top=5", success, error);
    });
  })();

到目前为止,我已经成功地将它与CoffeeScript,jQuery和Knockout.js一起使用。

答案 2 :(得分:3)

作为替代方案,您可以根据supercool datajs库向JayData提供oData支持。它在几个存储提供商或协议上提供了一个抽象的数据访问层,其中一个重要的是OData。

上面提到的查询看起来像这样

var  source = new $data.yourOdataContext({serviceUri:"http://odata.netflix.com/v2/Catalog"});

source.Titles
  .take(5)
  .forEach( function(catalog) { render(catalog); });

正如您可能不希望这会被转换为... /标题?$ filter = 5,因此即使简单的语法可能建议,也不会在客户端上进行操作。

JayData将为您提供JavaScript Language Query (JSLQ),让您使用ES5标准过滤器函数查询数据:所有使用JavaScript,不需要OData查询语法知识。

答案 3 :(得分:1)

如果要在表中显示数据并使用排序,分页,搜索,可以使用带有OData连接器https://www.datatables.net/的jQuery dataTables插件http://vpllan.github.io/jQuery.dataTables.oData/

您不需要任何其他编程,因为dataTables将为您执行操作。

答案 4 :(得分:0)

您可以基于我编写的axios来使用此OData客户端。

https://github.com/fabio-nettis/ODCJ

用于Java的OData连接器或更旧的名称为ODCJ,是基于诺言的客户端,它使用axios建立与OData V3 / V4服务的连接。 ODCJ提供了许多有用的功能来自定义请求url和过滤属性。