2017-10-06 52 views
0

我能够使用Node.js从Azure表中获取,发布,放置和删除数据。Pure JavaScript或jQuery调用Azure表存储

但是,在我无法使用Node.js并且需要使用纯JavaScript或jQuery解决方案(例如Ajax)对Azure Table Endpoint执行我的REST查询时,需求发生了变化。

我可能需要正确的头文件,授权和可能的SaS ......但在互联网上没有找到任何纯Ajax(不是.NET,而是纯JavaScript文件)或纯JavaScript解决方案的例子。作为一个例子,我可以打到一个非Azure表端点,比如一个普通的REST表并返回结果,但是当我将它设置为Azure表端点时,我得到了预期的403授权失败,因为我没有传递在/不确定授权在哪里设置和正确的标题:

<div id="jsondatahere" ></div> 

<script> 
yourUrl = 'https://myaccount.table.core.windows.net/myTable()' 

function Get(yourUrl){ 
    var Httpreq = new XMLHttpRequest(); // a new request 
    Httpreq.open("GET",yourUrl,false); 
    Httpreq.send(null); 
    return Httpreq.responseText; 
} 

    var json_obj = JSON.parse(Get(yourUrl)); 
console.log(json_obj); 
console.log("this is the author name: "+json_obj.clientName); 
document.getElementById("jsondatahere").innerHTML = json_obj.clientName; 
</script> 

使用我的例子,或jQuery的阿贾克斯,没有任何人有如何设置的授权,所以我可以得到的,后一个例子,说,删除?

更新:

我可以查询我的表,但我有输出,因为我习惯了使用JSON节点的值的问题。

<div id="jsondatahere" ></div> 

<!-- Browersify version of Node Azure Storage Files --> 
<script src="https://one.rackspace.com/download/attachments/303335292/azure-storage.common.js"></script> 
<script src="https://one.rackspace.com/download/attachments/303335292/azure-storage.table.js"></script> 

<script> 

var tableUri = 'https://minenotyours.table.core.windows.net'; 
var tableService = AzureStorage.createTableServiceWithSas(tableUri, '?sv=2016-05-31&tn=myInfo&sig=DQKSL13Z%2BF9Xp3WQaBtnEpyWADw9ggWqiwhvcE6YRXE%3D&se=2017-10-10T22%3A05%3A14Z&sp=raud'); 

var tableQuery = new AzureStorage.TableQuery().top(200); 
tableService.queryEntities('myInfo', tableQuery, null, function(error, results, response) { 
    if (error) { 
     // Query entities error 
     console.log(error); 
    } else { 
     for (var i = 0, entity; entity = results.entries[i]; i++) { 
      // Deal with entity object 
      console.log(entity); // Returns whole object 
      console.log(entity.clientName); // Returns [object Object] > clientName 
      console.log(response.body.value[0].clientName); // Returns Value as expected 
      document.getElementById("jsondatahere").innerHTML = response.body.value[0].clientName; // Outputs value to HTML 
     } 

    } 
}); 
</script> 

使用上述,我如何输出entity.clientName的XML值?

+0

CORS的支持看起来是那里的表:https://blogs.msdn.microsoft.com/windowsazurestorage/2013/11/27/windows -azure-storage-release-introduction-cors-json-minute-metrics-and-more /我也只是检查了界面,并在我的存储帐户的“表服务”下列出了CORS – Kode

+1

啊,这很好。我会删除之前的评论。我一直在寻找你如何使用JS进行身份验证,发现这个库,希望它有一些用处:https://dmrelease.blob.core.windows.net/azurestoragejssample/samples/sample-table.html –

+0

是的!这是一个很好的开始! – Kode

回答

0

使用Azure存储JavaScript库,我有我需要的工作。这是一个工作示例。请注意:作为最佳做法,我将在后端服务器上生成SaS令牌并使用createTableServicewithSaS选项。请务必设置您的CORS在Azure的门户网站Azure的表:

<!-- Uses Azure Storage JavaScript Library - https://dmrelease.blob.core.windows.net/azurestoragejssample/samples/sample-table.html --> 

<div id="jsondatahere" ></div> 

<!-- Browersify version of Node Azure Storage Files --> 
<script src="azure-storage.common.js"></script> 
<script src="azure-storage.table.js"></script> 

<script> 

var tableService = AzureStorage.createTableService('mystorage', 'blahblahblahbalh=='); 
var tableQuery = new AzureStorage.TableQuery().top(200); 
tableService.queryEntities('ClientInfo', tableQuery, null, function(error, results, response) { 
    if (error) { 
     // Query entities error 
     console.log(error); 
    } else { 
     for (var i = 0, entity; entity = results.entries[i]; i++) { 
      // Deal with entity object 
      console.log(entity); 
      console.log(entity.clientName._); 
      document.getElementById("jsondatahere").innerHTML += entity.clientName._; 
     } 
    } 
}); 
</script>