收藏本页 | 网站地图 | 投稿指南
 
 
当前位置:首页 >> 学院首页 >> 网页设计 >>

Ajxa的原理与实现 精华

放大字体  缩小字体  At: 2006-10-30 15:12  By: 年华 原创

之前在喜悦国际村上看到一篇Ajxa的实现  http://www.phpx.com/happy/thread-123327-1-2.html,原理讲的很明白,但应用不够灵活,自己改写了一下:


[code]<script type="text/java script">
var http_request = false;
//创建xmlHTTP的对像
//url -- 处理发送数据的函数如add.php
//functionName -- js得到处理结果返回值时相关的处理
//queryString -- 发送的queryString 可用js构造
//httpType -- 发送类型 默认为post
function makeRequest(url, functionName, queryString, httpType) {

        http_request = false;
        if (!httpType) httpType = "post";

        if (window.XMLHttpRequest) { // Non-IE...
                http_request = new XMLHttpRequest();
                if (http_request.overrideMimeType) {
                        http_request.overrideMimeType('text/plain');
                }
        } else if (window.ActiveXObject) { // IE
                try {
                        http_request = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                        try {
                                http_request = new ActiveXObject("Microsoft.XMLHTTP");
                        } catch (e) {}
                }
        }

        if (!http_request) {
                alert('Cannot send an XMLHTTP request');
                return false;
        }

        var changefunc="http_request.onreadystatechange = "+functionName;
        eval (changefunc);
        http_request.open(httpType, url, true);
        http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        if(httpType=="post"){
                http_request.send(queryString);
        }else{
                http_request.send(NULL);
        }
}


//得到返回值
function getReturnedText () {
        if (http_request.readyState == 4) {
                if (http_request.status == 200) {
                        var messagereturn = http_request.responseText;
                        alert(messagereturn);
                        return messagereturn;
                } else {
                        alert('There was a problem with the request.');
                }
        }
}
</script>[/code]

下面举例:

[code]<script type="text/java script">
function InTAB() {
        if (http_request.readyState == 4) {
                if (http_request.status == 200) {
                        var result = http_request.responseText;
                        if (result) {
                                document.getElementById('Inner').innerHTML=result;//返回值
                        }

                } else {
                        alert('There was a problem with the request.');
                }
        }
}

function Ajax(){
var title=document.getE;ementById('myform').title.value;
makeRequest('ajax.php',InTAB,"title="+title);
}
</script>

可以实现讲变量title发送给ajax.php,然后得到返回值(InTAB中的result),然后通过InTAB将返回值写入id为Inner的对象里(如<div id="Inner"></div>)[/code]

需要注意的问题:
1.函数Ajxa和InTAB是可以灵活运用的
2.alax.php编码应该为utf-8格式,如果其中包含了其他php或者html文件,也应该编码为utf-8,否则中文乱码!也可以在
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
后加
http_request.setRequestHeader("Content-Type","text/html");
http_request.setRequestHeader("Content-Type","gb2312");
3.返回值中如果含有java script不能被执行,我试过eval函数,没成功,待解决....

 






         









 
Google
论坛精华  
 
 
  ©2005-2008 站长吧 Master8.NET All Rights Reserved 陕ICP备05010609号