3

我在 Azure blob 存储中有一些数据。数据为 JSON,并以“application/json”内容类型保存。

我的应用程序将托管在“myapp.com”上,这是一个包含“myapp.cloudapp.net”的 CNAME 的域。我想我应该创建一个指向我的 Azure 存储的自定义域名,例如“storage.myapp.com”。

但是之后?我可以使用 JSONP 或其他方式对 Azure 存储进行 JSON ajax 调用吗?

如何更好地做到这一点?

非常感谢。

4

2 回答 2

9

好吧,显然 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执行 :) 缺点是必须对回调函数名称进行编码,但总比没有好。

快乐的日子,但如果有人有更好的方法,那就太好了。

干杯。

于 2011-03-30T20:23:41.833 回答
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 />');
    });
}

我已经在一个本身存储为 Blob 的 HTML 页面中对此进行了测试。

Unfortunately, I'm afraid the JavaScript "Same Origin Policy" will make this fairly difficult to use in practice.

于 2011-03-31T10:48:45.757 回答