用原生JavaScript实现jQuery的$.getJSON

  今天在写一DEMO,其中用到了jQuery的$.getJSON方法,写完后发现整个DEMO中用到jQuery中的就这一个地方,但要引入一个jQuery实在不划算,于是就自己实现了一个简单版的,基本可以满足需求,现分享出来:

var $ = {

    getJSON: function(url, params, callbackFuncName, callback){

        var paramsUrl ="",

            jsonp = this.getQueryString(url)[callbackFuncName];

        for(var key in params){

            paramsUrl+="&"+key+"="+encodeURIComponent(params[key]);

        }

        url+=paramsUrl;

        window[jsonp] = function(data) {

            window[jsonp] = undefined;

            try {

                delete window[jsonp];

            } catch(e) {}



            if (head) {

                head.removeChild(script);

            }

            callback(data);

        };



        var head = document.getElementsByTagName('head')[0];

        var script = document.createElement('script');

        script.charset = "UTF-8";

        script.src = url;

        head.appendChild(script);

        return true;

    },

    getQueryString: function(url) {

        var result = {}, queryString = (url && url.indexOf("?")!=-1 && url.split("?")[1]) || location.search.substring(1),

            re = /([^&=]+)=([^&]*)/g, m;

        while (m = re.exec(queryString)) {

            result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);

        }

        return result;

    }

};

  调用DEMO如下:

var url = "http://xxx.xxx.xxx?callback=jsonp123";

var params = {

    a:1,

    b:2

};

$.getJSON(url, params, "callback", function(data){

    //todo

});

  欢迎评论拍砖:)

你可能感兴趣的:(JavaScript)