worker.js 1.68 KB
(function () {
    var alaways = function () { return true; };
    var _ajax = function (settings) {
        var xhr = new XMLHttpRequest();
        var success = settings.success || alaways;
        var fail = settings.fail || alaways;
        var param = function (data) {
            return Object.keys(data).reduce(function (prev, key) {
                var value = data[key];

                return prev + key + "=" + value + "&";
            }, "").replace(/&$/, "");
        }

        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4) {
                var responseText = xhr.responseText;

                if (xhr.status == 200) {
                    success(responseText);
                } else {
                    fail(responseText);
                }
            }
        };

        settings.type = settings.type || "GET";
        settings.data = settings.data && param(settings.data);
        settings.async = settings.async || true;

        var hasContent = settings.type === "GET";

        if (hasContent && settings.data) {
            settings.url += (~settings.url.indexOf("?") ? "&" : "?") + settings.data;
        }

        xhr.open(settings.type || "GET", settings.url, settings.async);
        xhr.setRequestHeader("Content-type", settings.contentType || "application/x-www-form-urlencoded; charset=UTF-8");
        xhr.send(settings.data || null);
    };

    onmessage = function (e) {
        var data = e.data;
        var action = data.action,
            args = data.args;

        if (action === "ajax") {
            args.success = function (result) {
                postMessage(result);
            };
            _ajax(args);
        }
    };
}());