用原生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

  });