🏠 Home 

http

LEORChn JavaScript HTTP Lib

This script should not be not be installed directly. It is a library for other scripts to include with the meta directive // @require https://update.greasyfork.org/scripts/401997/797848/http.js

function http(){
var pointer = 0,
method, url, formed, dofun, dofail, onprogress;
arr(arguments).forEach(function(e){
switch(pointer){
case 0:
e = e.split(' ', 2); // 允许在第一个参数中用空格将 http-method 与 url 隔开,而省去 引号+逗号+引号 的麻烦
method = e[0].toUpperCase();
if(e.length > 1){
pointer++; // 偏移到下一个
e = e[1];
}else break;
case 1: url = e; break;
case 2:
if(e instanceof Function){ // 允许不添加 http-body 而直接撰写行为。
pointer++; // 偏移到下一个
}else{
formed = e;
break;
}
case 3: dofun = e; break;
case 4: dofail = e; break;
case 5: onprogress = e;
}
pointer++;
});
var x = 'ActiveXObject' in window?
new ActiveXObject("Microsoft.XMLHTTP"):
new XMLHttpRequest();
if(location.protocol.includes('https'))
url=url.replace('^http:', 'https:');
x.open(method, url, true);
x.timeout=60000;
x.responseType="text"; // IE要求先open才能设置timeout和responseType
x.onload=dofun;
x.ontimeout=x.onerror= dofail? dofail: null;
x.onprogress=onprogress;
if(formed)
x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); // TODO: 暂不明确IE是否适用
x.send(formed?formed:'');
}
function httpj(){
var a = arr(arguments);
if(!a[0].includes(' ')){
a[0] += ' ' + a[1];
a.splice(1, 1);
}
if(a[1] instanceof Function) a.splice(1, 0, null); // 如果 method+url 之后不是 String 而是 Function,判断为 onSuccess,将一个 null 插入到 formed
while(a.length < 5) a[a.length] = null; // 在剩下的空位填满null
// 始终转换为如此格式:0=method+url, 1=formed, 2=onSuccess, 3=onFail, 4=onProgress
http(a[0], a[1], // method+url, formed
function(){
var j,
stat = this.status,
resp = this.responseText;
try{
j = eval('('+ (resp || '{}') +')');
}catch(e){}
if(Array.isArray(j)) // JSON Array
j = { stat:stat, data:j }
else if(j instanceof Object) // JSON Object
j.stat = stat;
else // Nothing, text/plain
j = { stat:stat, data:resp }
a[2](j);
},
a[3], a[4]); // fail, progress
}
// edit: 2020-3-20 2:21
// edit: 2020-4-26 3:50