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

Alv*_*par 19 javascript jquery odata jaydata breeze

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

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

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

谢谢!

Ric*_*ner 16

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

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

HTH.


Mar*_*SFT 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))
Run Code Online (Sandbox Code Playgroud)

它生成的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);
    });
  })();
Run Code Online (Sandbox Code Playgroud)

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

  • 实际上,上面提到的breezejs使用这个库来提供它的OData功能. (2认同)
  • 一个“非常酷的小图书馆”:81KB 缩小后,它既不酷也不小。我们只希望与 Bing API 通信并为简单的操作加载如此庞大的库似乎相当浪费。我敢肯定它会做一百万件其他的事情,但这不是重点。 (2认同)