今天在写一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 });
欢迎评论拍砖:)