+ -
当前位置:首页 → 问答吧 → 也发一个AJAX应用类,各位大大帮助测试一下

也发一个AJAX应用类,各位大大帮助测试一下

时间:2007-11-06

来源:互联网

代码如下
复制PHP内容到剪贴板
PHP代码:

<?
//header("Content-type: text/html;charset=utf-8");//输出编码,避免中文乱码
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url=http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
<html xmlns="[url=http://www.w3.org/1999/xhtml]http://www.w3.org/1999/xhtml[/url]">
<head>
<meta http-equiv="Content-Type" c />
<title>无标题文档</title>
<script type="text/javascript">
function $(id) { 
     if (!id) {
   return null;
  }
  var returnObj = document.getElementById(id);
  if (!returnObj && document.all) {
   returnObj = document.all[id];
  }
  return returnObj;
 }
function Mes (mssage){ //输出信息
  $("display").innerHTML=mssage;
 }
//Name可以是表单名也可以是URL地址,
//dispose = “Mes”为回调函数名只能接收到返回的信息
//定义的函数例如:function Mes (mssage)
//technique可以是"GET" and "POST"表示传递方法
//technique也可以是input名传递单个input值
/*
POST方式传值:1.ayax(表单名,处理输出信息函数名应是字串型,POST发送方式可省略)//传送整个表单
   2.ayax(表单名,处理输出信息函数名应是字串型,input名或ID) //传送单个输入框的值
GET方式传值:ajax(Url地址+变量[a.php?a=1&b=2],处理输出信息函数名应是字串型,"GET")
*/
/**
 * **********************************************
 * Name可以是表单名也可以是URL地址,
 * dispose = “Mes”为回调函数名只能接收到返回的信息
 * 定义的函数例如:function Mes (mssage)
 * technique可以是"GET" and "POST"表示传递方法
 * technique也可以是input名传递单个input值
 * POST方式传值:1.ayax(表单名,处理输出信息函数名应是字串型,POST发送方式可省略)//传送整个表单
 *    2.ayax(表单名,处理输出信息函数名应是字串型,input名或ID) //传送单个输入框的值
 * GET方式传值:ajax(Url地址+变量[a.php?a=1&b=2],处理输出信息函数名应是字串型,"GET")
 */
function ajax(Name,dispose,technique){ // 发送表单
 var stamp ="timeStamp=" + new Date().getTime(); // 当前时间
 technique = technique? technique : "POST"; //传送变量方法
 var urlVar = null; // POST方法存储的变量
 var url = null; //处理信息页面地址
 
 this.print = function (mssage){ //输出信息
  eval(dispose+"('"+mssage+"')");
 }
 this.config = function () { // 处理基本信息函数
  this.print("正在处理信息...");
  if(technique.toUpperCase() == "GET" ){
   url = Name;
   stamp = "&"+stamp;
   technique = "GET";
  }else{
   url = document.forms[Name].action;
   stamp = "?"+stamp;
   if(technique.toUpperCase()=="POST"){// 将页面中名为Name的表单各个元素(除去按钮以外的元素)转换为URL的形式
    //欲返回的字符串
    var returnString ="";
    var arr =  new Array();
    var j = 0;
    //取得表单元素组
    var formElements = document.forms[Name].elements;
    //组合url
    //例如'/strutsaction.do&name=value'的形式
    for(var i = formElements.length-1;i >= 0; --i ) {
     //拼写参数
     if(formElements[i].type != 'button' && formElements[i].type != 'submit' && formElements[i].value != "" )
     {
      arr[j++] = escape(formElements[i].name) + "=" + escape(formElements[i].value);
     }
    }
    if(arr.length > 0) returnString = arr.join("&");
    urlVar = returnString;
   }else{
    urlVar = $(technique).name+"="+$(technique).value;
   }
   technique = "POST";
  }
 }
 this.http = function(){ // 浏览器检测
  var req = null;
   //开始初始化XMLHttpRequest对象
        if(window.XMLHttpRequest){//Mozilla浏览器
          req = new XMLHttpRequest();
          if(req.overrideMimeType){//设置MIME类别
             req.overrideMimeType("text/xml");
          }
        }else if(window.ActiveXObject){//IE浏览器
          try{
            req = new ActiveXObject("Msxml2.XMLHTTP");
          }catch(e){
            try{
             req = new ActiveXObject("Microsoft.XMLHTTP");
            }catch(e2){
     try {
      req=new ActiveXObject("Msxml2.XMLHTTP.4.0");
     }catch (e3){
      req=null;
     }
    }
          }
     }
  if(!req && window.createRequest)req = window.createRequest();
  return req;
 }
 this.call = function (){
  var http_request = this.http();
  if (!http_request) {
   this.print("浏览器初始化异常。");
   return null;
  }else{
   this.print("正在初始化浏览器...");
  }
  http_request.onreadystatechange = function(){//回调函数
   if (http_request.readyState != 4){
    this.print("正在读取数据...");
    return;
   }else{
    if (http_request.status == 200){
     if(http_request.responseText !="" && http_request.responseText != null ){
      this.print(http_request.responseText);
     }else{
      this.print("");
     }
     return true;
    }else if (http_request.status == 404) {
     this.print("错误:无法找到请示页面"+url+"的地址。");
     return false;
    }else{
     this.print("错误:服务器返回 (" + http_request.status + ")错误");
     return false;
    }
   }
  }
  http_request.open(technique, url + stamp, true);
     if(technique == "POST")http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); //采用POST方法所必须进行的设置
     http_request.send(urlVar);
 }
 this.config();
 this.call();
}
</script>
</head>
<body>
<div id="display">显示数据</div>
<form name="form1" method="post" action="./a1.php">
<input name="come" type="text" id="come" value="admin">
<input name="come1" type="text" id="come1" value="admin">
<input name="bu1" type="button" value="AJAX" >
</form>
</body>
</html>

作者: yang_ysb   发布时间: 2007-11-05

另有一问题没有解决
不知道到为什么我有绝对路径可以发送
用相对路径不可以发送
请看这段
<form name="form1" method="post" action="./a1.php">
<input name="come" type="text" id="come" value="admin">
<input name="come1" type="text" id="come1" value="admin">
<input name="bu1" type="button" value="AJAX" onclick="ajax('form1','Mes','post');">
</form>
是发不出去的

作者: yang_ysb   发布时间: 2007-11-05

中文显示就乱码

作者: pets511   发布时间: 2007-12-06


escape  被这个重新编码了,你可以去掉,或者是在接受页面上加一个反escape编码的php也可以``
在这个论坛上面就有,你可以搜一下

作者: 17too   发布时间: 2007-12-08

还是文档问题,为啥不说明一下呢。

作者: luzhou   发布时间: 2007-12-09

复制PHP内容到剪贴板
PHP代码:
function js_unescape($str)
{
        $ret = '';
        $len = strlen($str);

        for ($i = 0; $i < $len; $i++)
        {
                if ($str[$i] == '%' && $str[$i+1] == 'u')
                {
                        $val = hexdec(substr($str, $i+2, 4));

                        if ($val < 0x7f) $ret .= chr($val);
                        else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
                        else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));

                        $i += 5;
                }
                else if ($str[$i] == '%')
                {
                        $ret .= urldecode(substr($str, $i, 3));
                        $i += 2;
                }
                else $ret .= $str[$i];
        }
        return $ret;
}

这个是我在论坛里找到的一个,可以那个反解码

作者: 17too   发布时间: 2007-12-09