使用jQuery从Azure Blob存储查询JSON数据
我在Azure blob存储中有一些数据。数据是JSON,并已使用“application/JSON”内容类型保存 我的应用程序将托管在“myapp.com”上,该域包含一个指向“myapp.cloudapp.net”的CNAME。我想我应该创建一个像“storage.myapp.com”这样的自定义域名,该域名将指向我的Azure存储 但是后来呢?我可以使用JSONP或其他方式对Azure存储进行JSON ajax调用吗 如何才能更好地做到这一点使用jQuery从Azure Blob存储查询JSON数据,jquery,json,azure,jsonp,azure-storage-blobs,Jquery,Json,Azure,Jsonp,Azure Storage Blobs,我在Azure blob存储中有一些数据。数据是JSON,并已使用“application/JSON”内容类型保存 我的应用程序将托管在“myapp.com”上,该域包含一个指向“myapp.cloudapp.net”的CNAME。我想我应该创建一个像“storage.myapp.com”这样的自定义域名,该域名将指向我的Azure存储 但是后来呢?我可以使用JSONP或其他方式对Azure存储进行JSON ajax调用吗 如何才能更好地做到这一点 非常感谢。很显然,Azure blob存储不支
非常感谢。很显然,Azure blob存储不支持JSONP,但它是可以做到的 例如,如果我将此JSON存储在Azure blob中:
{"Name":"Valeriano","Surname":"Tortola"}
我试着:
<script type="text/javascript">
$.getJSON("https://myaccount.blob.core.windows.net/jsonptests/data?jsoncallback=?",
function (data) {
alert(data.Name);
});
</script>
我确实:
<script type="text/javascript">
function dataCallback(data) {
alert(data.Name);
}
</script>
<script type="text/javascript" src="https://myaccount.blob.core.windows.net/jsonptests/data"></script>
函数dataCallback(数据){
警报(data.Name);
}
然后执行dataCallBack
get executed:)缺点是必须对回调函数名进行harcoded,但这总比什么都没有好
快乐的日子,但如果有人有更好的方式将是伟大的
干杯。Windows Azure Blob存储REST接口返回XML(POX),而不是JSON。。。但是,从JavaScript查询很简单!使用restype=container和comp=list调用您的容器URL:
$(document).ready(function () {
// Retrieve list of Blobs
var containerUrl = 'http://tcontepub.blob.core.windows.net/json/';
$.ajax({
type: 'GET',
url: containerUrl + '?restype=container&comp=list',
dataType: 'xml',
success: listBlobs
});
});
然后可以对返回的XML进行基本的解析。在这里,我将提取URL并将其显示在div中
function listBlobs(xml) {
$(xml).find('Blob').each(function() {
var url = $(this).find('Url').text();
$('#panel').append(url + '<br />');
});
}
函数listBlobs(xml){
$(xml).find('Blob').each(function(){
var url=$(this.find('url').text();
$(“#面板”).append(url+”
);
});
}
我在一个HTML页面中测试了这一点,该页面本身存储为Blob
不幸的是,我担心JavaScript“同源策略”会使这在实践中变得相当困难。如果你的页面在www.whater.com,而你的存储在storage.whater.com,它会起作用吗?不幸的是,我担心JavaScript“同源策略”会碍事。这就是问题所在。我认为Azure Blob应该支持JSONP,可惜它们不支持。进行跨域JSON请求的唯一方法是使用JSONP。Azure TS不支持JSONP,因此这是一个使用与JSONP相同的原则的解决方案。此外,还可以使用jQuery ajax设置自定义回调函数名,选项为-
{JSONP:false,jsonpCallback:“callbackName”}
function listBlobs(xml) {
$(xml).find('Blob').each(function() {
var url = $(this).find('Url').text();
$('#panel').append(url + '<br />');
});
}