2011-03-30 5 views
3

Azure blob 저장소에 일부 데이터가 있습니다. 데이터는 JSON이며 "application/json"콘텐츠 유형으로 저장되었습니다.jQuery로 Azure Blob 저장소의 JSON 데이터를 쿼리하십시오.

내 응용 프로그램은 "myapp.cloudapp.net"에 대한 CNAME이 포함 된 도메인 "myapp.com"에서 호스팅됩니다. 내 Azure 저장소에있는 "storage.myapp.com"과 같은 맞춤 도메인 이름을 만들어야한다고 생각합니다.

그렇다면? JSONP 또는 다른 방법으로 JSON ajax 호출을 Azure 저장소로 호출 할 수 있습니까?

어떻게하면 더 좋은 방법일까요?

고마워요.

답변

8

분명히 Azure Blob 저장소는 JSONP를 지원하지 않지만 바로 수행 할 수 있습니다.

{"Name":"Valeriano","Surname":"Tortola"} 

내가 시도 : 내가 푸른 BLOB이 JSON을 저장하는 경우

예를 들어,

<script type="text/javascript"> 

    $.getJSON("https://myaccount.blob.core.windows.net/jsonptests/data?jsoncallback=?", 
      function (data) { 
       alert(data.Name); 
      }); 
</script> 

이 작동하지 않습니다. 음, 실제로 브라우저는 데이터를 다운로드하지만 콜백은 없습니다. 그래서, 콜백 기능이 JSON을 저장하는 경우 JSONP가 작동하는 방법을 고려 :

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 실행 얻을 :) 단점은 그 콜백 함수 이름입니다 할 코드가 필요하지만 아무것도없는 것보다 낫다.

행복한 일이지만 누군가가 더 좋은 방법을 갖고 있다면 좋을 것입니다.

건배.

+0

크로스 도메인 JSON 요청을 만드는 유일한 방법은 JSONP를 사용하는 것입니다. Azure TS는 JSONP를 지원하지 않으므로 JSONP와 동일한 원칙을 사용하는 해결 방법입니다. – vtortola

+0

또한이 옵션을 사용하여 jQuery ajax를 사용하여 사용자 정의 콜백 함수 이름을 설정할 수 있습니다. -'{jsonp : false, jsonpCallback : "callbackName"}'http://api.jquery.com/jQuery.ajax/ – dongseok0

2

Windows Azure Blob 저장소 REST 인터페이스는 JSON이 아닌 XML (POX)을 반환합니다. 그러나 JavaScript에서 쿼리하는 것은 간단합니다! 목록 = restype = 컨테이너 빌려와 컨테이너 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 페이지에서이를 테스트했습니다.

자바 스크립트 "동일 출처 정책"을 사용하면 실제로 사용하기가 매우 어려워집니다.

+0

페이지는 www.whatever.com에 있으며 저장 용량은 storage.whatever.com입니까? – vtortola

+2

불행히도, JavaScript "동일 출처 정책"이 방해가 될 것 같습니다. – tomconte

+0

그게 문제입니다. 나는 Azure BLOB가 JSONP를 지원해야한다고 생각한다. – vtortola