JavaScript------脚本化HTTP
以下:
1、HTTP:超文本传输协议;
2、Web应用架构:
Ajax (JSONP):请求服务器
Comet: 服务器推送;
3、XMLHttpRequest请求:
var requerst = new XMLHttpRequest(); //实例化
request.open(method,url);//指定请求;
//method:指定HTTP方法或动作;包括:GET POST DELETE HEAD OPTIONS PUT
//url:相对于文档的url或使用绝对路径URL,但是不能跨域;
//第三个是可选参数 默认true表示异步; false表示同步
request.setRequestHeader('Content-Type','application/json;charset=UTF-8');//设置请求头
request.onreadystatechange = function(){
if(request.readyState=== 4 || requset.status === 200){
request.getResponseHeader('Content-Type');//响应类型
request.responseText;//文本形式
request.responseXML;//Document形式
//dosomething 一般传递给回调函数
}
}//响应处理程序 顺序无所谓
request.send(body);//发送请求;此时才会启动网络,但是以上的顺序不能变;
//上传带有文件的表单数据:Content-Type需要使用multipart/form-data来POST提交;
//或(XHR2)使用FormData对象;多次使用append()放入请求参数。支持File和字符串,Blog等;
4、使用<script>发送请求JSONP:
一个根据指定url发送JSONP请求,然后把响应数据传递给回调函数的例子:
//在URL中添加一个名为jsonp的查询参数,用于指定请求的回调函数的名称
function getJSONP(url,callback){ //为请求创建一个唯一的回调函数名称 var cbnum = "cb"+getJSONP.counter++; var cbname = "getJSONP."+cbnum ; //使用jsonp作为参数名(有的是callback) if(url.index('?') === -1) url+='?jsonp=' + cbname; else url+='&jsonp=' + cbname; //创建script元素用于发送请求 var script = document.createElement('script'); //回调函数执行 getJSONP[cbnum] = function(response){ try{
callback(response); }
finally{
delete getJSONP[cbnum]; //删除函数
script.parentNode.removeChild(script);//移除元素;
} } script.src = url; //立即请求;
document.body.appendChlid(script); //添加到文档 } getJSONP.counter = 0;
一个通用的例子:
var ax = function(url,method,async,data,contentType,successfn,errorfn){ data = (data==null || data=="" || typeof(data)=="undefined")? {"date": new Date().getTime()} : data; async = (async==null || async=="" || typeof(async)=="undefined")? true : async; method = (method==null || method=="" || typeof(method)=="undefined")? 'GET' : method; var request = new XMLHttpRequest(); request.open(method,url,async); if(contentType==null || contentType=="" || typeof(contentType)=="undefined"){ //do noting 浏览器会根据参数数据自动设置 }else{ //"application/json;charset=utf-8" requst.setRequestHeader("Content-Type",contentType); } //响应: request.onreadystatechange = function(){ if(request.readyState === 4 ){ //响应完成 //获取响应类型,服务器端给的 var type = request.getResponseHeader("Content-Type"); var resp = requset.responseText; if(type.indexOf('xml') !==-1 && requset.responseXML){ resp = requset.responseXML; }else if(type.indexOf('json') !==-1 ){ resp = JSON.parse(resp); }else{ //text类型 返回 } if(request.status === 200){ //而且成功了 successfn(resp); }else if(request.status > 399){ //但是有错误 errorfn(resp); } } } //request.overrideMimeType("application/json;charset=utf-8"); //强制响应类型为json if(contentType.indexOf('json') !==-1 || contentType.indexOf('JSON') !==-1){ request.send(JSON.stringify(data)); }else{ request.send(data); } };
可根据实际情况改写;
5、服务端推送的Comet技术:使用EventSource对象,不成熟。。。。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人