Запрос данных JSON из хранилища BLOB-объектов Azure с помощью jQuery

У меня есть некоторые данные в хранилище BLOB-объектов Azure. Данные представлены в формате JSON и сохранены с типом содержимого «application/json».

Мое приложение будет размещено на «myapp.com», домене, который содержит CNAME для «myapp.cloudapp.net». Думаю, мне следует создать собственное доменное имя, например «storage.myapp.com», которое указывает на мое хранилище Azure.

Но потом? Могу ли я использовать JSONP или другой способ выполнения ajax-вызовов JSON в хранилище Azure?

Как это лучше сделать?

Большое спасибо.


person vtortola    schedule 30.03.2011    source источник


Ответы (2)


Что ж, судя по всему, хранилище BLOB-объектов Azure не сразу поддерживает JSONP, но это можно сделать.

Например, если я сохраню этот JSON в большом двоичном объекте Azure:

{"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 :) Недостатком является то, что имя функции обратного вызова должно быть закодировано, но это лучше, чем ничего.

Счастливых дней, но если у кого-то есть лучший способ, было бы здорово.

Ваше здоровье.

person vtortola    schedule 30.03.2011
comment
Единственный способ сделать междоменные запросы JSON — использовать JSONP. Azure TS не поддерживает JSONP, поэтому это обходной путь, использующий те же принципы, что и JSONP. - person vtortola; 13.06.2011
comment
Также можно установить пользовательское имя функции обратного вызова с помощью jQuery ajax с этими параметрами - { jsonp: false, jsonpCallback: "callbackName" } api.jquery.com/ jQuery.ajax - person dongseok0; 23.05.2017

Интерфейс REST хранилища BLOB-объектов Windows Azure возвращает XML (POX), а не JSON... Однако запросы из JavaScript очень просты! Вызовите URL-адрес вашего контейнера с restype=container и comp=list:

$(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 «Same Origin Policy» сделает это довольно трудным для использования на практике.

person tomconte    schedule 31.03.2011
comment
Это работает, если ваша страница находится на www.whatever.com, а ваше хранилище — на storage.whatever.com? - person vtortola; 31.03.2011
comment
К сожалению, я боюсь, что политика одинакового происхождения JavaScript будет мешать. - person tomconte; 31.03.2011
comment
Это проблема. Я думаю, что Azure Blobs должны поддерживать JSONP, жаль, что они этого не делают. - person vtortola; 01.04.2011