2012-04-11 21 views
18

我們的項目目前使用Silverlight來使用Odata服務。這使得生活變得非常簡單,因爲我們可以參考OData服務,從而爲我們提供生成的服務參考/實體。如何使用Html/Javascript使用OData服務?

但是,我們是否應該轉向Html(html5)進行一些討論。我想知道如果我們做這個改變會發生什麼。我們當然會利用像jQuery這樣的框架。

  • 我主要關心的是如何通過JavaScript/jQuery使用相同的OData服務。
  • 我們如何設想反序列化/序列化從此OData服務返回的實體?
  • 我們的數據合同是否應該是硬編碼的(如果是這樣,我們真的不能接受)?

謝謝!

回答

15

OData sources can return data as JSON因此,您的網頁可以將您的數據XHR並將其作爲JSON接收,然後將其反序列化回到Javascript對象中,以供您挑選並行動或顯示。

這裏有一些額外的鏈接,讓你開始:

HTH。

+0

添加額外的鏈接到上述建議庫。 ODataJs - http://datajs.codeplex.com/documentation – 2015-07-26 05:33:39

10

我們還製作了一個非常酷的小型庫,名爲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

實際上,上面提到的breezejs在封面下使用這個庫來提供它的OData功能。 – 2012-12-08 01:33:06

+0

JayData和其他一些庫一樣。 :)它不會去任何地方。 – 2013-04-17 15:02:37

+1

一個「非常酷的小圖書館」:在81KB縮小它不是很酷或很少。我們只想與Bing API進行通信,並加載如此龐大的庫以進行簡單操作似乎相當浪費。我敢肯定它還有其他一些事情,但那不是重點。 – 2014-05-30 10:45:19

3

作爲一種替代方案,您可以拍攝JayData,它具有oData支持 - 基於supercool datajs庫。它提供了多個存儲提供者或協議的抽象數據訪問層,其中一個重要的是OData。

上面提到的查詢會是這個樣子

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

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

正如你可能不會想到這個被翻譯成... /標題?$過濾器= 5,所以操作不會在客戶端完成,即使簡單的語法可能會提示。

JayData會給你JavaScript Language Query (JSLQ)讓你使用ES5標準過濾函數查詢數據:所有使用JavaScript,不需要知道OData查詢語法。