簡單封裝get和jsonp

卡卡西村長發表於2016-03-23

/**
 * 向伺服器傳送GET請求。
 *
 * @param {type} url
 * @param {type} async 是否非同步呼叫
 * @param {type} fnCallback 回撥函式
 * @returns {undefined} 如果是非同步呼叫,透過fnCallback函式回撥;如果是同步呼叫,直接返回請求結果。
 */
function request(url, async, fnCallback) {
    var http;
    if (window.XMLHttpRequest) {
        http = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        http = new ActiveXObject("Microsoft.XMLHTTP");
    } else return;

    if (async) {
        if (fnCallback) {
            http.onreadystatechange = function () {
                if (http.readyState == 4 && http.status == 200) {
                    fnCallback(http.responseText);
                }
            }
        }
        http.open("GET", url, true);
        http.send();
    } else {
        http.open("GET", url, false);
        http.send();
        if (fnCallback) {
            fnCallback(http.responseText);
        }
        return http.responseText;
    }
}

/**
 * 向跨域伺服器請求指定的URL。
 * 透過QueryString中必須包含名為callback的引數,該引數的值是回撥函式的名稱。
 *
 * @param {type} url
 * @returns {undefined} 透過QueryString中的callback引數指定的回撥函式進行處理。
 */
function jsonp(url) {
    var b = document.getElementsByTagName("head")[0];
    var a = document.createElement("script");
    a.type = "text/javascript";
    a.src = url;
    b.appendChild(a);
}

相關文章