当前位置: 代码迷 >> Ajax >> 小弟我也来发一个自己做的 ajax 简单封装
  详细解决方案

小弟我也来发一个自己做的 ajax 简单封装

热度:187   发布时间:2012-10-24 14:15:58.0
我也来发一个自己做的 ajax 简单封装
我也来发一个自己做的 ajax 简单封装,望多提意见。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>ajax</title>
<script type="text/javascript"><!--
function Ajax() {
var xmlHttpReq = null;
if (window.XMLHttpRequest) {
  xmlHttpReq = new XMLHttpRequest();
} else {
  if (window.ActiveXObject) {
    var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP',
 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0',
 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 
 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
    for(var i=0; i<versions.length; i++) {
      try {
        xmlHttpReq = new ActiveXObject(versions[i]);
        if(xmlHttpReq) {
          break;
        }
      } catch(e) {}
    }
  }
}
	
var handler = null;
	
this.invoke = function (mode, url, value, _handler) {
  handler = _handler;
  if(mode == 'get') {
    var querystring = url+'?'+value+'&'+Math.random();
    if(window.XMLHttpRequest) {
      xmlHttpReq.open('GET', querystring);
      xmlHttpReq.onreadystatechange = this.callback;
      xmlHttpReq.send(null);
    } else {
      xmlHttpReq.open('GET', querystring, true);
      xmlHttpReq.onreadystatechange = this.callback;
      xmlHttpReq.send();
    }
  }
  else if(mode == 'post') {
    xmlHttpReq.open('POST', url);
    xmlHttpReq.onreadystatechange = this.callback;
    xmlHttpReq.setRequestHeader('Content-Type',
 'application/x-www-form-urlencoded');
    xmlHttpReq.send(value);
  }
};
	
this.callback = function () {
  if (xmlHttpReq.readyState == 4) {
    if (xmlHttpReq.status == 200) {
      handler(xmlHttpReq.responseText);
    } else {
      alert("请刷新页面!");
    }
  }
};
}

// 调用示例
new Ajax().invoke(
  "get",
  "/index.php",
  'name=hello',
  run
);

function run(response) {
  alert(response);
}
// --></script>
</head>

<body>
</body>
</html>


服务端数据返回脚本:index.php

<?php
echo $_GET['name'];

// echo $_POST['name'];
?>


  兼容 IE、firefox、chrome 等浏览器。

  var querystring = url+'?'+value+'&'+Math.random();,Math.random() 主要是进行 GET 请求时为了防止缓存。

  发送请求时,对数据最好进行 urlencode 编码。

转载地址:http://www.xhttp.cn/2010/06/18
1 楼 attol 2011-01-20  
最近很多帖子都想投隐藏和新手帖
2 楼 mayEyeInfo 2011-01-20  
.....
this.invoke = function (mode, url, value, _handler) {  
31.  handler = _handler;  
32.  if(mode == 'get') {  
33.    var querystring = url+'?'+value+'&'+Math.random();  
34.    if(window.XMLHttpRequest) {  
......
为什么要用Math.random();
求解答!!!!
3 楼 flamesea 2011-01-20  
回楼上的,这是为了避免浏览器缓存造成的查询结果不变,而通过附加Math.random()来使得每次的请求不尽相同
4 楼 mirinda95925 2011-01-21  
mayEyeInfo 写道
.....
this.invoke = function (mode, url, value, _handler) {  
31.  handler = _handler;  
32.  if(mode == 'get') {  
33.    var querystring = url+'?'+value+'&'+Math.random();  
34.    if(window.XMLHttpRequest) {  
......
为什么要用Math.random();
求解答!!!!

因为ie6比较懒,要是请求没有变,可能会造成不发送。
5 楼 rainsilence 2011-01-23  
mirinda95925 写道
mayEyeInfo 写道
.....
this.invoke = function (mode, url, value, _handler) {  
31.  handler = _handler;  
32.  if(mode == 'get') {  
33.    var querystring = url+'?'+value+'&'+Math.random();  
34.    if(window.XMLHttpRequest) {  
......
为什么要用Math.random();
求解答!!!!

因为ie6比较懒,要是请求没有变,可能会造成不发送。

随机数还是会造成重复,还是用+new Date好些
6 楼 rainsilence 2011-01-23  
其实ajax框架最难得部分在于timeout。你能模拟出来嘛?多浏览器下效果不一样
7 楼 夜之son 2011-01-24  
rainsilence 写道
mirinda95925 写道
mayEyeInfo 写道
.....
this.invoke = function (mode, url, value, _handler) {  
31.  handler = _handler;  
32.  if(mode == 'get') {  
33.    var querystring = url+'?'+value+'&'+Math.random();  
34.    if(window.XMLHttpRequest) {  
......
为什么要用Math.random();
求解答!!!!

因为ie6比较懒,要是请求没有变,可能会造成不发送。

随机数还是会造成重复,还是用+new Date好些


加时间戳一直是推荐的方式吧。
8 楼 zhouyrt 2011-01-25  
rainsilence 写道
其实ajax框架最难得部分在于timeout。你能模拟出来嘛?多浏览器下效果不一样


最难的的确是timeout。我在ajax系列之四,之五按检查超时,超时处理两部分来处理。

http://snandy.iteye.com/blog/738234
http://snandy.iteye.com/blog/738420
9 楼 LeoChowComtop 2011-01-25  
rainsilence 写道
mirinda95925 写道
mayEyeInfo 写道
.....
this.invoke = function (mode, url, value, _handler) {  
31.  handler = _handler;  
32.  if(mode == 'get') {  
33.    var querystring = url+'?'+value+'&'+Math.random();  
34.    if(window.XMLHttpRequest) {  
......
为什么要用Math.random();
求解答!!!!

因为ie6比较懒,要是请求没有变,可能会造成不发送。

随机数还是会造成重复,还是用+new Date好些

,是否取缓存数据,作为参数传入如何?
client 的选择会更多些。。
因为有时候,缓存的更好,比如图片。。
10 楼 rainsilence 2011-01-25  
LeoChowComtop 写道
rainsilence 写道
mirinda95925 写道
mayEyeInfo 写道
.....
this.invoke = function (mode, url, value, _handler) {  
31.  handler = _handler;  
32.  if(mode == 'get') {  
33.    var querystring = url+'?'+value+'&'+Math.random();  
34.    if(window.XMLHttpRequest) {  
......
为什么要用Math.random();
求解答!!!!

因为ie6比较懒,要是请求没有变,可能会造成不发送。

随机数还是会造成重复,还是用+new Date好些

,是否取缓存数据,作为参数传入如何?
client 的选择会更多些。。
因为有时候,缓存的更好,比如图片。。


跟你说的不是一回事
11 楼 rainsilence 2011-01-25  
zhouyrt 写道
rainsilence 写道
其实ajax框架最难得部分在于timeout。你能模拟出来嘛?多浏览器下效果不一样


最难的的确是timeout。我在ajax系列之四,之五按检查超时,超时处理两部分来处理。

http://snandy.iteye.com/blog/738234
http://snandy.iteye.com/blog/738420


又开始广告了。。。
12 楼 luciferdevil 2011-01-25  
attol 写道
最近很多帖子都想投隐藏和新手帖

怎么投 教教
  相关解决方案