蓝戒博客

  • 首页
  • 研发说
  • 架构论
  • 效能录
  • AI谈
  • 随笔集
智构苍穹
融合 AI、架构与工程实践,沉淀方法论,构建可持续的技术价值。
  1. 首页
  2. 研发说
  3. 正文

原生js写ajax请求(兼容各主流浏览器)

2015年6月2日 7878点热度 0人点赞 0条评论

1.创建XMLHttpRequest对象

[codesyntax lang="php"]

function createXMLHTTPRequest() { 
//1.创建XMLHttpRequest对象 
//这是XMLHttpReuquest对象无部使用中最复杂的一步 
//需要针对IE和其他类型的浏览器建立这个对象的不同方式写不同的代码 
var xmlHttpRequest; 
if (window.XMLHttpRequest) { 
//针对FireFox,Mozillar,Opera,Safari,IE7,IE8 
xmlHttpRequest = new XMLHttpRequest(); 
//针对某些特定版本的mozillar浏览器的BUG进行修正 
if (xmlHttpRequest.overrideMimeType) { 
xmlHttpRequest.overrideMimeType("text/xml"); 
} 
} else if (window.ActiveXObject) { 
//针对IE6,IE5.5,IE5 
//两个可以用于创建XMLHTTPRequest对象的控件名称,保存在一个js的数组中 
//排在前面的版本较新 
var activexName = [ "MSXML2.XMLHTTP", "Microsoft.XMLHTTP" ]; 
for ( var i = 0; i < activexName.length; i++) { 
try { 
//取出一个控件名进行创建,如果创建成功就终止循环 
//如果创建失败,回抛出异常,然后可以继续循环,继续尝试创建 
xmlHttpRequest = new ActiveXObject(activexName[i]); 
if(xmlHttpRequest){ 
break; 
} 
} catch (e) { 
} 
} 
} 
return xmlHttpRequest; 
}

[/codesyntax]

 

2.get请求

[codesyntax lang="php"]

function get(){
var req = createXMLHTTPRequest();
if(req){
req.open("GET", "http://test.com/?keywords=手机", true);
req.onreadystatechange = function(){
if(req.readyState == 4){
if(req.status == 200){
alert("success");
}else{
alert("error");
}
}
}
req.send(null);
}
}

[/codesyntax]

 

3.post请求

[codesyntax lang="php"]

               function post(){
                var req = createXMLHTTPRequest();
                if(req){
                    req.open("POST", "http://test.com/", true);
                    req.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=gbk;");   
                    req.send("keywords=手机");
                    req.onreadystatechange = function(){
                        if(req.readyState == 4){
                            if(req.status == 200){
                                alert("success");
                            }else{
                                alert("error");
                            }
                        }
                    }
                }
            }

[/codesyntax]

 

post请求需要设置请求头

4.    readyState与status:

readyState有五种状态:

0 (未初始化): (XMLHttpRequest)对象已经创建,但还没有调用open()方法;
1 (载入):已经调用open() 方法,但尚未发送请求;
2 (载入完成): 请求已经发送完成;
3 (交互):可以接收到部分响应数据;
4 (完成):已经接收到了全部数据,并且连接已经关闭。
如此一来,你应该就能明白readyState的功能,而status实际是一种辅状态判断,只是status更多是服务器方的状态判断。关于status,由于它的状态有几十种,我只列出平时常用的几种:
100——客户必须继续发出请求
101——客户要求服务器根据请求转换HTTP协议版本
200——成功
201——提示知道新文件的URL
300——请求的资源可在多处得到
301——删除请求数据
404——没有发现文件、查询或URl
500——服务器产生内部错误、

//引用实例:

[codesyntax lang="php"]

<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script>
function createXMLHTTPRequest() {     
                 //1.创建XMLHttpRequest对象     
                 //这是XMLHttpReuquest对象无部使用中最复杂的一步     
                 //需要针对IE和其他类型的浏览器建立这个对象的不同方式写不同的代码     
                 var xmlHttpRequest;  
                 if (window.XMLHttpRequest) {     
                     //针对FireFox,Mozillar,Opera,Safari,IE7,IE8     
                    xmlHttpRequest = new XMLHttpRequest();     
                     //针对某些特定版本的mozillar浏览器的BUG进行修正     
                     if (xmlHttpRequest.overrideMimeType) {     
                         xmlHttpRequest.overrideMimeType("text/xml");     
                     }     
                 } else if (window.ActiveXObject) {     
                     //针对IE6,IE5.5,IE5     
                     //两个可以用于创建XMLHTTPRequest对象的控件名称,保存在一个js的数组中     
                     //排在前面的版本较新     
                     var activexName = [ "MSXML2.XMLHTTP", "Microsoft.XMLHTTP" ];     
                     for ( var i = 0; i < activexName.length; i++) {     
                         try {     
                             //取出一个控件名进行创建,如果创建成功就终止循环     
                             //如果创建失败,回抛出异常,然后可以继续循环,继续尝试创建     
                            xmlHttpRequest = new ActiveXObject(activexName[i]);   
                            if(xmlHttpRequest){  
                                break;  
                            }  
                         } catch (e) {     
                         }     
                     }     
                 }     
                 return xmlHttpRequest;  
             }
 wx.config({
    debug: false,
    appId: '{$signPackage.appId}',
    timestamp: {$signPackage.timestamp},
    nonceStr: '{$signPackage.nonceStr}',
    signature: '{$signPackage.signature}',
    jsApiList: [
        'onMenuShareTimeline',
        'onMenuShareAppMessage' 
    ]
  });
 wx.ready(function () {
	//监听“分享给朋友”
    wx.onMenuShareAppMessage({
      title: '清心丝络',
      desc: '清心丝络活动',
      link: 'http://www.zhubaotown.com/mobile/temporary_topics.php?from=friends_share&topic=pure_wire_network',
      imgUrl: 'http://www.zhubaotown.com/mobile/themes/miqinew/images/pure_wire_network/banner.jpg',
      success: function (res) {
		 var req = createXMLHTTPRequest();  
			if(req){  
				req.open("GET", "http://www.zhubaotown.com/mobile/temporary_topics.php?from=friends_share&topic=pure_wire_network", true);  
				req.onreadystatechange = function()
				{  
					if(req.readyState == 4)
					{  
						if(req.status == 200)
						{  
							//alert("success");  
						}else{  
							//alert("error");  
						}  
					}  
				}  
				req.send(null);  
		      }
		alert('很高兴,您已分享成功');
      },
      cancel: function (res) {
        alert('很遗憾,您已取消分享');
      },
      fail: function (res) {
        alert(JSON.stringify(res));
      }
    });
	//分享到朋友圈
    wx.onMenuShareTimeline({

      title: '清心丝络',
      link: 'http://www.zhubaotown.com/mobile/temporary_topics.php?from=friends_share&topic=pure_wire_network',
      imgUrl: 'http://www.zhubaotown.com/mobile/themes/miqinew/images/pure_wire_network/banner.jpg',
      success: function (res) {
       var req = createXMLHTTPRequest();  
			if(req){  
				req.open("GET", "http://www.zhubaotown.com/mobile/temporary_topics.php?from=friends_share&topic=pure_wire_network", true);  
				req.onreadystatechange = function()
				{  
					if(req.readyState == 4)
					{  
						if(req.status == 200)
						{  
							//alert("success");  
						}else{  
							//alert("error");  
						}  
					}  
				}  
				req.send(null);  
		      }
       	alert('很高兴,您已分享成功');
      },
      cancel: function (res) {
         alert('很遗憾,您已取消分享');
      },
      fail: function (res) {
        alert(JSON.stringify(res));
      }
    });
});
</script>

[/codesyntax]

标签: ajax javascript
最后更新:2025年9月13日

cywcd

我始终相信,技术不仅是解决问题的工具,更是推动思维进化和创造价值的方式。从研发到架构,追求极致效能;在随笔中沉淀思考,于 AI 中对话未来。

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

cywcd

我始终相信,技术不仅是解决问题的工具,更是推动思维进化和创造价值的方式。从研发到架构,追求极致效能;在随笔中沉淀思考,于 AI 中对话未来。

最新 热点 随机
最新 热点 随机
深扒 Google Gemini Spark 这位"24小时不下班"的AI管家 Google推出Code Wiki,把“屎山代码”秒变可聊天的百科全书! VideoLingo凭什么敢称“全自动的视频本地化流水线”? 首个超2万亿级开源模型Kimi K3震撼发布,大模型格局彻底变天了? 别再手写 AI Agent 了!谷歌开源 agents-cli,一键给你的 AI 助手加满神仙级技能点 ChatGPT 实时语音 vs Gemini Live:深度实测!谁才是地表最强“无痛嘴替”?
开发者集体起立!cc-switch更新:原生干掉外挂,协议、会话、技能全包圆了!一键生成百万播放短视频?被吹上天的RedditVideoMakerBot,到底是搞钱神器还是时间杀手?别再迷信传统 RAG 了!知识库新物种 SAG 强势登场,实时干掉大模型“幻觉”!别再死磕提示词了!Google Flow Agent 彻底颠覆 AI 视频,有手就能当导演剪映要收网了?狂割韭菜后,这款狂揽5.7万Star的开源神器砸了谁的饭碗!被Figma卡脖子?这款自托管的开源神仙工具:Penpot,才是设计与开发的终极解药!
Google推出Code Wiki,把“屎山代码”秒变可聊天的百科全书! Node 版本管理工具对比:nvm、fnm、volta,谁才是你的最佳选择? AI 开始雇佣人类?RentAHuman 爆火背后:一场关于「AI 代理经济」的真实实验 免费一键部署自己的 OpenClaw,实现“养虾自由” 别再把 Goose 当成“又一个 AI Agent”:它真正厉害的地方,很多人都没看懂 AI专用浏览器来了:比Chrome快10倍,Agent时代的基础设施正在重构
最近评论
渔夫 发布于 9 个月前(11月05日) 学到了,感谢博主分享
沙拉小王子 发布于 9 年前(11月30日) 适合vue入门者学习,赞一个
沙拉小王子 发布于 9 年前(11月30日) 适合vue入门者学习,赞一个
cywcd 发布于 9 年前(04月27日) 请参考一下这篇文章http://www.jianshu.com/p/fa4460e75cd8
cywcd 发布于 9 年前(04月27日) 请参考一下这篇文章http://www.jianshu.com/p/fa4460e75cd8

COPYRIGHT © 2025 蓝戒博客_智构苍穹-专注于大前端领域技术生态. ALL RIGHTS RESERVED.

京ICP备12026697号-2