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

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

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

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

谢谢!

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

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

  • 新的Javascript OData库[MSDN]
  • OData协议示例[MSDN]
  • 利用JQuery利用JSON格式的OData端点
  • 使用JayData消耗OData服务
  • 使用BreezeJS消耗OData服务

HTH。

我们还创建了一个非常酷的小库,名为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一起使用。

作为替代方案,您可以根据supercool datajs库为具有oData支持的JayData提供一个镜头。 它在几个存储提供商或协议上提供了一个抽象的数据访问层,其中一个重要的是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语言查询(JSLQ),让您使用ES5标准filter函数查询数据:所有使用JavaScript,不需要OData查询语法知识。

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

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