使用jQuery从Azure Blob存储中查询JSON数据

时间:2011-03-30 16:53:56

标签: 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调用吗?

如何更好地做到这一点?

非常感谢。

2 个答案:

答案 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“同源策略”会使这在实践中难以使用。