1月14号学习脚本化HTTP(第72天的学习)

<!--创建函数-->
function getText(url,callback)
{
<!--创建新请求-->
var request = new XMLHttpRequest();
<!--指定待获得的URL编码形式表示的 ASCII 字符(十六进制格式)-->
request.open("GET" , url);
<!--定义事件处理程序-->
request.onreadystatechange = function()
{
<!--判断 ===三个等于好是同等于的意思 什么是同等于呢 ===三个等于号第一的对比条件就是他们的类型是否相等 不等就是false -->
if(request.readyState === 4 && request.status === 200)
{
var type =  request.getResponseHeader("Content-Type");
<!--确保响应是文本-->
if(type.match(/^text/))
<!--把它传递给回调函数-->
callback(request.responseText);
}
};
<!--立即发送请求-->
request.send(null);
}

<!--创建函数-->
function getTextSync(url)
{
<!--创建新请求-->
var request = new XMLHttpRequest();
<!--传递false实现同步-->
request.open("GET" , url , false);
<!--立即发送请求-->
request.send(null);
<!--如果请求不是200 就报错-->
if(request.status !== 200) throw new Error(request.statusText);
<!--定义变量 type POST请求需要"Content-Type"头指定请求主题的MIME类型-->
var type = request.getResponseHeader("Content-Type");
<!--如果类型错误,就报错-->
if(!type.matct(/^text/))
throw new Error("Expected textual response; got: " + type);
return request.responseText;
}

<!--创建函数url callback值-->
function get(url,callback)
{
<!--创建新请求-->
var request = new XMLHttpRequest();
<!--指定待获得的URL编码形式表示的 ASCII 字符(十六进制格式)-->
request.open("GET" , url);
<!--定义事件监听器-->
request.onreadystatechange = function()
{
<!--如果请求完成且成功-->
if(request.readyState === 4 && request.status === 200)
{
<!--获得响应的类型-->
var type = erquest.getResponseHeader("Content-Type");
<!--检查类型, 将得到html文档-->
if(type.indexOf("xml") !== -1 && request.responseXML)
<!--Document对象响应-->
callback(request.responseXML);
else if(type === "application/json")
<!--JSON响应-->
callback(JSON.parse(erquest.responseText));
else
<!--字符串响应-->
callback(request.responseText);
}
};
<!--立即发送请求-->
request.send(null);
}

<!--创建函数data值-->
function encodeFormData(data)
{
<!--一直返回字符串-->
if(!data) return "";
<!--保存名=值对-->
var pairs = [];
<!--循环每一个名字-->
for(var name in data)
{
<!--跳过继承属性-->
if(!data.hasOwnProperty(name)) continue;
<!--跳过方法-->
if(typeof data[name] === "function") continue;
<!--把值转换成字符串-->
var value = data[name].toString();
<!--编码名字-->
name = encodeURIComponent(name.replace("%20" , "+"));
<!--编码值-->
value = encodeURLComponent(name.replace("%20" , "+"));
<!--记住名 = 值对-->
pairs.push(name + "=" + value);
}
}

<!--创建函数-->
function postFormData(url, data, callback)
{
<!--判断 FormData类型是否风雨 undrfined-->
if(typeof FormData === "undrfined")
<!--新建throw-->
throw new Error("FormData is not implemented")
<!--创建新的HTTP请求-->
var request = new XMLHttpRequest();
<!--对指定的URL编码形式表示的 ASCII 字符(十六进制格式)发送POST请求 浏览器将会按照下面两步来发送数据-->
request.open("POST" , url);
<!--事件处理程序-->
request.onreadystatechange = function()
{
<!--当响应完成时-->
if(request.readyState === 4 && callback)
<!--调用会调函数-->
callback(request);
};
<!--新建foemdata-->
var formdata = new FormData();
<!--循环name 是 data-->
for(var name in data)
{
<!--跳过继承的属性-->
if(!data.hasOwnProperty(name)) continue;
<!--定义value=data[name]-->
var value = data[name];
<!--跳过方法-->
if(typeof value === "function") continue;
<!--一部分添加名/值对-->
formdata.append(name, value);
}
<!--send()会自动设置Content-Type头-->
request.send(formdata);
}

<!--创建函数 url timeout callback 值-->
function timedGetText(url, timeout, callback)
{
<!--创建新请求-->
var request = new XMLHttpRequest();
<!--是否超时-->
var timedout = false;
<!--启动计时器,在timeout毫秒后将中止请求-->
var timer = setTimeout(function(){
<!--设置标记-->
timedout = true;
<!--然后中止请求-->
request.abort();
},
<!--中止请求之前的时长-->
timeout);
<!--获得指定的URl 编码形式表示的 ASCII 字符(十六进制格式)-->
request.open("GET" , url);
<!--定义事件处理程序-->
request.onreadystatechange = function()
{
<!--忽略未完成的请求-->
if(request.readyState !== 4) return;
<!--忽略中止请求-->
if(timedout) return;
<!--取消等待的超时-->
clearTimeout(timer);
<!--如果请求成功-->
if(request.status === 200)
<!--把response传给会调函数-->
callback(request.responseText);
};
<!--立即发送请求-->
request.send(null);
}


<!--创建函数 url callback值-->
function getJSONP(url, callback)
{
<!--每次自增计算器-->
var cbnum = "cb" + getJSONP.counter++;
<!--作为JSONP函数的属性-->
var cbname = "getJSONP." + cbnum;
<!--URL没有查询部分-->
if(url.indexOf("?") === -1)
<!--作为查询部分添加参数-->
url += "?json=" + cbname;
<!--否则-->
else
<!--作为新的参数添加它-->
url += "&jsonp=" + cbname;
<!--创建script元素用来发送请求-->
var script = document.createElement("script");
<!--定义将被脚本执行的回调函数-->
getJSONP[cbnum] = function(response)
{
<!--异常-->
try
{
<!--处理响应数据-->
callback(response);
}
<!--结果-->
finally
{
<!--删除该函数-->
delete getJSONP[cbnum];
<!--移除script元素-->
script.parentNode.removeChild(script);
}
};
<!--立即触发HTTP请求-->
script.src = url;
<!--把它添加到文档中-->
document.body.appendChild(script);
}
<!--用于创建唯一回调函数名称的计数器-->
getJSONP.counter = 0;

猜你喜欢

转载自xjwolaile.iteye.com/blog/1769686