您的位置:首页 > Web前端 > JavaScript

Javascript & AJAX

2013-10-25 09:14 357 查看
//客户端提交:
//1.0 ajax的创建(兼容浏览器):
this.createObj = function () {
try {
// code for IE7+, Firefox, Chrome, Opera, Safari
this.obj = new XMLHttpRequest();
} catch (e) {
// code for IE6, IE5
this.obj = new ActiveXObject("Microsoft.XMLHTTP");
}
return obj;
}

//1.1 ajax提交数据:
this.toServer = function (xmlHttp,Surl, Cvalue) {
xmlHttp.open("POST", Surl, true);
xmlHttp.send(Cvalue);
}

//1.2 ajax接收服务器的返回数据:
this.receiveFromServer = function (xmlHttp,targetId) {
var span = document.getElementById(targetId);
if (xmlHttp.readyState < 4) {
// 正在交互
span.style.color = "blue";
span.innerHTML = "正在检测...";
}
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
// 请求成功
...this.obj.responseText
}

//1.3 调用回调函数:
function receiveFromServer(xmlHttp,targetId) {
var span = document.getElementById(targetId);
if (xmlHttp.readyState < 4) {
// 正在交互
//document.write(xmlHttp.readyState+":"+xmlHttp.status);
span.style.color = "blue";
span.innerHTML = "正在检测...";
}
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
if (parseInt(xmlHttp.responseText)) {            //,return 1 -->success
span.style.color = "red";
span.innerHTML = "SORRY, 用户名已经存在!";
return;
}
else {
span.style.color = "green";
span.innerHTML = "OK, 用户名可以使用!";
return;
}
span.innerHTML = "暂时无法进行检测...";
}

//1.4 ajax整合:
this.allFunction = function (targetId, Surl, Cvalue) {
xmlHttp=this.createObj();
xmlHttp.onreadystatechange = function(){receiveFromServer(xmlHttp,targetId)};
this.toServer(xmlHttp,Surl, Cvalue);
}


    需要注意的一些问题:

给onreadystatechange传递参数的方式:
    假设xmlhttp.onreadystatechange=isok(),但有时候这个函数往往要带有参数,
    如果这样写:xmlhttp.onreadystatechange=isok(a,b),调试的时候就会报错。下面提供两种方法:
        1. xmlhttp.onreadystatechange= function(){xx(a,b)};//在javascript中有些函数规定了参数个数,所以这种匿名调用非常常见
        2. xmlhttp.onreadystatechange= new Function("xx(a,b)");   //xx(a,b)是带有参数的函数。

Ajax发送数据编码:
    1. 由于Ajax在发送的时候都是采用的UTF-8编码,所以,如果你的页面时GB2312的,在发送中文Ajax参数的时候需要用encodeURI编码参数,
并且需要编码2次,如:
   1.1. geturl=encodeURI(encodeURI(name));
   1.2. geturl=encodeURI(name);geturl=encodeURI(geturl);
2. 在接收页面,PHP中,先使用urldecode解码,然后使用iconv("UTF-8","GB2312",$str)进行编码转换,如:
   $name=urldecode($_POST['name']);
   $name =iconv("UTF-8","GB2312",$name);
   这时数据再写到数据库中就是中文的了。

服务器端返回:
    1. 在服务器端以Map的集合形式处理客户端提交的数据
    2. 服务器端获取数据通过$_POST 和 $_GET 方式,对于通过url提交的方式数据,也就是地址栏中附加的数据,都是通过$_GET方式获取。 其中,通过Get方式提交,因为Url中字符限制为255,所以存在数据量限制。(一般Get:2k,Post:8M)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript ajax
相关文章推荐