SQLの窓

2012年03月26日


Win8 Metro(JS) : WinJS.xhr の内容(XMLHttpRequest)

内容は、XMLHttpRequest を普通に工夫されていますが、特徴として Metro(JS) の then メソッド
で結果の処理を行う事になっています。then メソッドは、Promise オブジェクトのメソッドで(実際
の所在もはもう少し奥で複雑ですが) complete, error, progress の callback が登録されるように
なっています。

そして、それらは XMLHttpRequest では、req.readyState === 4 で req.status が 200〜300 で
正常終了扱いで、それら以外は error が実行されます。引数には、いずれも XMLHttpRequest オブ
ジェクトが渡されています。( 300 は含まない )

オプションは、以下の通りです。
1) options.type // "GET" または "POST" ( 省略は "GET" )
2) options.url
3) options.user
4) options.password
5) options.responseType : いくつかあるようですが、まだ不確定
( ここでは "" : 空文字 )
6) options.headers : JSON
7) options.data : send で送るデータ

※ ソースから解りますが、に非同期のみです。
(function () {

    WinJS.Namespace.define("WinJS", {
        xhr: function (options) {
            var req;
            return new WinJS.Promise(
                function (c, e, p) {
                    req = new XMLHttpRequest();
                    req.onreadystatechange = function () {
                        if (req.readyState === 4) {
                            if (req.status >= 200 && req.status < 300) {
                                c(req);
                            } else {
                                e(req);
                            }
                            req.onreadystatechange = function () { };
                        } else {
                            p(req);
                        }
                    };

                    req.open(
                        options.type || "GET",
                        options.url,
                        // Promise based XHR does not support sync.
                        //
                        true,
                        options.user,
                        options.password
                    );
                    req.responseType = options.responseType || "";

                    Object.keys(options.headers || {}).forEach(function (k) {
                        req.setRequestHeader(k, options.headers[k]);
                    });

                    req.send(options.data);
                },
                function () {
                    req.abort();
                }
            );
        }
    });

})();
サンプルではこんなふうに使っていました
    function makeXhrCall(url, callback) {
        sdkSample.displayError("");
        document.getElementById("scenario3Output").innerHTML = "";

        WinJS.xhr({ url: url }).then(
            function (result) {
            callback(result.responseXML, result.status);
        },
            function (result) {
            callback(null, result.status);
        });
    }



【Windows8 Metro(JS/C#)の最新記事】
posted by lightbox at 2012-03-26 17:43 | Windows8 Metro(JS/C#) | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり