[js] 轻便的XMLHttpRequest应用函数:downloadUrl() 【转】

前段时间在用google map api的函数库的时候,发现里面的downloadUrl函数非常好用,所以自己写了一个。用腻了那些什么框架什么池,到头来发现越简单的东西越是适合我这种懒人。

downloadUrl(url, callback, data);

参数说明:
url不用说了;
callback是回调函数,函数调用的时候会有两个参数:data, responseCode,data就是responseText,responseCode就是status;
data是要post的数据,get方式时此参数可省略。

用法一:直接把回调函输写在参数中
downloadUrl(’http://www.ugia.cn/wp-data/test.htm’, function (data, responseCode) {
alert(data); // 这里处理返回的数据
});

用法二:先定义回调函数,然后传入
function test(data, responseCode) {
alert(data); // 这里处理返回的数据
}

downloadUrl(’http://www.ugia.cn/wp-data/test.htm’, test);

源代码:

  1. /**
  2. * download url lite
  3. *
  4. * @author: legend(legendsky@hotmail.com)
  5. * @link: http://www.ugia.cn/?p=122
  6. * @version: 1.0
  7. *
  8. * @param string   url     
  9. * @param string   callback  回调函数
  10. * @param string  data      post数据
  11. *
  12. * @return void
  13. */
  14. function downloadUrl(url, callback, data)
  15. {
  16.     // init
  17.     url += url.indexOf("?") >= 0 ? "&" : "?";
  18.     url += "random_download_url=" + Math.random();
  19.    
  20.     if (typeof data == 'undefined')
  21.     {
  22.         var data = null;
  23.     }
  24.     method = data ? 'POST' : 'GET';
  25.    
  26.     // create XMLHttpRequest object
  27.     if (window.XMLHttpRequest)
  28.     {
  29.         var objXMLHttpRequest = new XMLHttpRequest();
  30.     }
  31.     else
  32.     {
  33.         var MSXML = ['MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
  34.         for(var n = 0; n < MSXML.length; n ++)
  35.         {
  36.             try
  37.             {
  38.                 var objXMLHttpRequest = new ActiveXObject(MSXML[n]);       
  39.                 break;
  40.             }
  41.             catch(e)
  42.             {
  43.             }
  44.         }
  45.     }
  46.    
  47.     // send request
  48.     with(objXMLHttpRequest)
  49.     {
  50.         //setTimeouts(30*1000,30*1000,30*1000,30*60*1000);
  51.         try
  52.         {
  53.             open(method, url, true);
  54.            
  55.             if (method == 'POST')
  56.             {
  57.                 setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
  58.             }
  59.            
  60.             send(data);           
  61.         }
  62.         catch(e)
  63.         {
  64.             alert(e);
  65.         }
  66.        
  67.         // on ready
  68.         onreadystatechange = function()
  69.         {
  70.             if (objXMLHttpRequest.readyState == 4)
  71.             {
  72.                 callback(objXMLHttpRequest.responseText, objXMLHttpRequest.status);
  73.                 delete(objXMLHttpRequest);
  74.             }
  75.         }
  76.     }
  77. }
原文地址:https://www.cnblogs.com/Godblessyou/p/1779175.html