다음을 통해 공유


WinJS.xhr을 사용하여 매시업을 만드는 방법(HTML)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

매시업이란 둘 이상의 소스에서 온 데이터를 사용해 새로운 것을 만드는 웹 응용 프로그램입니다. 이 예제에서는 XMLHttpRequest(XHR)를 사용하여 원격 RSS(Really Simple Syndication) 피드를 검색 및 표시하는 방법을 보여 줍니다.

알아야 할 사항

기술

사전 요구 사항

지침

단계 1: 웹 액세스를 위해 앱 설정

앱은 네트워크 액세스와 같은 특정 접근 권한 값을 명시적으로 추가해야 합니다. 접근 권한 값에 대한 자세한 내용은 앱 접근 권한 값 선언네트워크 접근 권한 값을 구성하는 방법을 참조하세요.

  1. Visual Studio에서 빈 JavaScript 앱을 만듭니다.

  2. package.appxmanifest 파일을 열고 접근 권한 값 탭으로 이동합니다.

  3. Windows 버전 샘플의 경우 인터넷(클라이언트) 접근 권한 값이 선택되어 있습니다. 선택되어 있지 않으면 선택합니다. 앱이 홈 네트워크 또는 회사 네트워크의 웹 서비스에 클라이언트로 연결해야 할 경우 개인 네트워크(클라이언트 및 서버) 접근 권한 값이 필요합니다.

    Windows Phone 버전 샘플의 경우 인터넷(클라이언트 및 서버) 접근 권한 값을 선택합니다.

    참고  Windows Phone에는 앱에서 네트워크에 완전히 액세스하게 해 주는 단일 네트워크 접근 권한 값(인터넷(클라이언트 및 서버))이 있습니다.

     

단계 2: RSS 피드 가져오기

WinJS.xhr 함수는 XHR을 사용해 지정된 URL에서 데이터를 검색합니다. WinJS.xhr은 비동기적이며 요청 데이터에 대해 Promise를 반환합니다. RSS 피드를 가져오려면 이 Promise에 대해 충족된 처리기를 지정합니다. 오류 처리기 및 진행률 처리기를 지정할 수도 있습니다.

패키지의 모든 페이지(로컬 컨텍스트의 페이지)에서 WinJS.xhr 함수를 호출할 수 있습니다.

참고  참고: XHR 요청의 대상 URL은 앱의 ApplicationContentUriRules(앱의 패키지 매니페스트에 나열됨)에 의해 제한되지 않습니다.

 

이 예에서는 WinJS.xhr을 사용하여 rss.msnbc.msn.com RSS 피드에 액세스합니다. 이 피드는 두 개의 콜백 함수를 Promise에 전달합니다.

  • xhrParseXml: 충족된 처리기. XHR 요청이 성공하면 이 함수가 호출됩니다.
  • xhrError: 오류 처리기. 요청이 성공하지 못하면 이 함수가 호출됩니다.
WinJS.xhr({ url: "http://rss.msnbc.msn.com/id/3032127/device/rss/rss.xml" }).then(
    xhrParseXml, xhrError
    );

다음 단계에서는 xhrParseXml 및 xhrError 메서드를 정의합니다.

단계 3: 결과 구문 분석

WinJS.xhr 요청이 성공하면 마지막 예의 코드는 xhrParseXml을 호출합니다. xhrParseXml 함수는 RSS 항목을 통해 반복되고 각각에 대한 링크를 생성합니다. 기본 페이지인 xhrOutput의 div에 링크가 표시됩니다.

function xhrParseXml(result) {

    var outputArea = document.getElementById("xhrOutput");
    var xml = result.responseXML;


    if (xml) {
        var items = xml.querySelectorAll("rss > channel > item");
        if (items) {
            var length = Math.min(10, items.length);
            for (var i = 0; i < length; i++) {
                var link = document.createElement("a");
                var newLine = document.createElement("br")
                link.setAttribute("href", items[i].querySelector("link").textContent);
                link.innerText = (i + 1) + ") " + items[i].querySelector("title").textContent;
                outputArea.appendChild(link);
                outputArea.appendChild(newLine);
            }
        } else {
            outputArea.innerHTML = "There are no items available at this time";
        }
    } else {
        outputArea.innerHTML = 
            "Unable to retrieve data at this time. Status code: " + statusCode;
    }
}

다음 예는 출력 영역에 대한 HTML 선언을 보여줍니다.

<div id="xhrOutput">
</div>

단계 4: 오류 처리

원격 데이터에 액세스하지 못할 가능성이 항상 있으므로, XHR 요청 처리를 위한 오류를 처리하는 방법을 제공해야 합니다. 이 예에서는 간단한 오류 처리기를 정의합니다.

자세한 내용은 네트워크 앱에서 예외 처리를 참조하세요.

function xhrError(result) {

    var statusCode = result.status; 
    var outputArea = document.getElementById("xhrOutput");
    outputArea.innerHTML = 
        "Unable to retrieve data at this time. Status code: " + statusCode;
}

전체 예제

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Mashup</title>

    <!-- WinJS references - Windows -->
    <link href="//Microsoft.WinJS.2.0/css/ui-dark.css" rel="stylesheet">
    <script src="//Microsoft.WinJS.2.0/js/base.js"></script>
    <script src="//Microsoft.WinJS.2.0/js/ui.js"></script>

    <!-- WinJS references - Phone -->
    <link href="/css/ui-themed.css" rel="stylesheet" />
    <script src="//Microsoft.Phone.WinJS.2.1/js/base.js"></script>
    <script src="//Microsoft.Phone.WinJS.2.1/js/ui.js"></script>

    <!-- Mashup references -->
    <link href="/css/default.css" rel="stylesheet">
    <script src="/js/default.js"></script>
</head>
<body>

    <div id="xhrOutput">
    </div>
</body>
</html>

// default.js
(function () {
    "use strict";

    var app = WinJS.Application;

    // This function responds to all application activations.
    app.onactivated = function (eventObject) {
        if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
            // Initialize your application here.
            WinJS.UI.processAll();
            loadRemoteXhr();
        }
    };

    function loadRemoteXhr() {

        document.getElementById("xhrOutput").innerHTML = "";
        WinJS.xhr({ url: "http://rss.msnbc.msn.com/id/3032127/device/rss/rss.xml" }).then(
            xhrParseXml, xhrError
            );

    }

    function xhrParseXml(result) {

        var outputArea = document.getElementById("xhrOutput");
        var xml = result.responseXML;

        if (xml) {
            var items = xml.querySelectorAll("rss > channel > item");
            if (items) {
                var length = Math.min(10, items.length);
                for (var i = 0; i < length; i++) {
                    var link = document.createElement("a");
                    var newLine = document.createElement("br")
                    link.setAttribute("href", items[i].querySelector("link").textContent);
                    link.innerText = (i + 1) + ") " + items[i].querySelector("title").textContent;
                    outputArea.appendChild(link);
                    outputArea.appendChild(newLine);
                }
            } else {
                outputArea.innerHTML = "There are no items available at this time";
            }
        } else {
            outputArea.innerHTML = 
                "Unable to retrieve data at this time. Status code: " + statusCode;
        }
    }

    function xhrError(result) {

        var statusCode = result.status;
        var outputArea = document.getElementById("xhrOutput");
        outputArea.innerHTML = "Unable to retrieve data at this time. Status code: " + statusCode;
    }


    app.start();
})();

추가 기능이 포함된 다운로드 가능한 샘플은 웹 서비스의 콘텐츠 및 컨트롤 통합 샘플(영문)을 참조하세요.

관련 항목

다른 리소스

웹 서비스에 연결

네트워크 앱에서 예외 처리

WinJS xhr을 사용하여 파일을 다운로드하는 방법

참조

WinJS.xhr

XMLHttpRequest

XMLHttpRequest 고급 기능

샘플

웹 서비스의 콘텐츠 및 컨트롤 통합 샘플

Blob을 사용하여 콘텐츠 저장 및 로드 샘플

웹 인증 샘플

XHR, 탐색 오류 처리 및 URL 구성표 샘플