Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery从Azure Blob存储查询JSON数据_Jquery_Json_Azure_Jsonp_Azure Storage Blobs - Fatal编程技术网

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

使用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存储中有一些数据。数据是JSON,并已使用“application/JSON”内容类型保存

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

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

如何才能更好地做到这一点


非常感谢。

很显然,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 />');
    });
}