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

本文介绍了一个简单的downloadUrl函数实现,该函数可用于发起GET或POST请求,并通过回调函数处理响应数据。适用于希望简化网络请求处理流程的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间在用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);

源代码:

下载: download_url.js
  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.  
  25.     method = data ? 'POST' : 'GET';
  26.    
  27.     // create XMLHttpRequest object
  28.     if (window.XMLHttpRequest)
  29.     {
  30.         var objXMLHttpRequest = new XMLHttpRequest();
  31.     }
  32.     else
  33.     {
  34.         var MSXML = ['MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
  35.         for(var n = 0; n < MSXML.length; n ++)
  36.         {
  37.             try
  38.             {
  39.                 var objXMLHttpRequest = new ActiveXObject(MSXML[n]);       
  40.                 break;
  41.             }
  42.             catch(e)
  43.             {
  44.             }
  45.         }
  46.     }
  47.    
  48.     // send request
  49.     with(objXMLHttpRequest)
  50.     {
  51.         //setTimeouts(30*1000,30*1000,30*1000,30*60*1000);
  52.         try
  53.         {
  54.             open(method, url, true);
  55.            
  56.             if (method == 'POST')
  57.             {
  58.                 setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
  59.             }
  60.            
  61.             send(data);           
  62.         }
  63.         catch(e)
  64.         {
  65.             alert(e);
  66.         }
  67.        
  68.         // on ready
  69.         onreadystatechange = function()
  70.         {
  71.             if (objXMLHttpRequest.readyState == 4)
  72.             {
  73.                 callback(objXMLHttpRequest.responseText, objXMLHttpRequest.status);
  74.                 delete(objXMLHttpRequest);
  75.             }
  76.         }
  77.     }
  78. }
 
`downloadUrl` 是一种用于提供文件下载服务的接口地址或链接。在实际应用中,用户通过访问该链接可以从服务器获取特定的文件内容。通常情况下,这种链接具有一定的安全性措施和时效性限制,以防止未经授权的访问和资源滥用。 当用户请求生成一个 `downloadUrl` 时,后端系统会执行以下操作: 1. **生成临时令牌**:创建一个随机字符串(例如 `abcd1234`),并将此令牌与对应的文件标识符、过期时间等信息一起存储到数据库中。 2. **验证令牌有效性**:每当用户尝试使用 `downloadUrl` 进行访问时,系统会对请求中的令牌进行检查,确认其是否存在、是否已过期以及是否匹配当前请求的文件[^1]。 3. **返回文件流**:一旦令牌验证成功,服务器将向客户端发送相应的文件数据流,并且设置合适的 HTTP 响应头来控制浏览器行为,比如直接触发文件下载而不是在浏览器内显示内容。 对于某些特定场景下的实现方式,如基于 Electron 框架开发的应用程序,则可以通过调用 `webContents.downloadURL` 方法来启动文件下载过程。这种方式利用了 Chromium 内部机制,能够忽略部分响应头信息并触发自定义的 `will-download` 事件处理程序[^2]。 此外,在一些在线支付平台提供的账单管理功能里,也常见到类似的设计模式。例如支付宝开放平台就允许开发者通过调用相关 API 获取带有时间限制的账单下载链接,确保只有合法持有者才能在规定时间内完成下载任务[^3]。 综上所述,`downloadUrl` 不仅仅是一个简单的超链接,它背后隐藏着一套完整的权限校验和服务逻辑,旨在保障数据安全的同时为用户提供便捷高效的文件传输体验。 ```javascript const download = async () => { let result = await proxy.Request({ url: props.createDownloadUrl }); if (!result) { return; } let result2 = props.downloadUrl + "/" + result.data; window.location.href = props.downloadUrl + "/" + result.data; console.log("createDownloadUrl", props.createDownloadUrl); console.log("1", result); console.log("2", result2); console.log("downloadUrl", props.downloadUrl); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值