我在Azure blob存储中有一些数据。数据是JSON,并且已使用“application / json”内容类型保存。
我的应用程序将托管在“myapp.com”,这是一个包含“myapp.cloudapp.net”CNAME的域名。我想我应该创建一个像“storage.myapp.com”这样的自定义域名,这个域名可以放到我的Azure存储中。
但是呢?我可以使用JSONP或其他方式对Azure存储进行JSON ajax调用吗?
如何更好地做到这一点?
非常感谢。
答案 0 :(得分:8)
嗯,显然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>
它不起作用。嗯,实际上浏览器下载数据但没有回拨。因此,考虑到JSONP如何工作,如果我使用回调函数保存此JSON:
dataCallback({"Name":"Valeriano","Surname":"Tortola"})
我做了:
<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
:)缺点是回调函数名称必须被编码,但它总比没有好。
快乐的日子,但如果有人有更好的方式会很棒。
干杯。
答案 1 :(得分:2)
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 />');
});
}
我在HTML页面中对此进行了测试,该页面本身存储为Blob。
不幸的是,我担心JavaScript“同源策略”会使这在实践中难以使用。