`
andy136566
  • 浏览: 285599 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ajax学习

 
阅读更多

jquery库实现ajax

function verify(){
    //1、获取文本框内容
    //js方法
    //document.getElementById("userName")  获取dom方法
    //jquery方法,id的选择器(#),class选择器(.)
    //jquery的方法返回的都是jquery的对象,可以在它上面继续执行其他jquery方法
    var jqueryObj = $("#userName");
    var userName = jqueryObj.val();

    //2、传送数据到Server
    //jquery方法
    $.get("AjaxServer?name="+userName,null,callback) ;
}

//回调函数
function callback(data){
    //3、接受server数据

    //4、动态显示返回数据
    var resultObj = $("#result");
    resultObj.html(data);
}

 

 

使用XMLHttpReque来进行Ajax异步数据交互

 

//使用XMLHttpReque来进行Ajax异步数据交互
var xmlhttp;
function verify(){
    //1、使用dom方式获取文本框内容
    var userName = document.getElementById("userName").value;
    //2、创建XMLHttpRequest对象
    if(window.XMLHttpRequest){
        //针对firefox,safari、opera,IE7+
        xmlhttp = new XMLHttpRequest();
        //针对某些版本的Mozill的浏览器
        if(xmlhttp.overrideMimeType){
            xmlhttp.overrideMimeType("text/xml");
        }
    }   else if(window.ActiveXObject){
        // 针对IE5、IE6、IE5.5
        //两个可以用于创建XMLHttpRequest的空间名称
        var activeName = ["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
        for(var i=0;i<activeName.length; i++){
            try{
                xmlhttp = new ActiveXObject(activeName[i]);
                break;
            }catch(e){
            }
        }
    }
    if(!xmlhttp){
        alert("创建失败");
        return;
    }

    //3、注册回调函数
    //readystate一改变回调函数调用
    xmlhttp.onreadystatechange = callback;

    //4、设置连接信息
    xmlhttp.open("GET","AjaxServer?name="+userName,true);
    //POST请求方式的区别:设置http的请求头
    //xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    //发送内容在send中


    //5、发送数据,与server交互
    //同步方式下,send这句会在服务器数据回来后才执行完
    //异步方式下,send这句立即执行完
    xmlhttp.send(null);
}

function callback(){
    //6、接收响应数据
    //判断对象的状态是否交互完成
    if(xmlhttp.readyState == 4){
        //判断http的交互是否成功
        if(xmlhttp.status == 200){
            var responseText = xmlhttp.responseText;
            var divNode = document.getElementById("result");
            divNode.innerHTML = responseText;
        }
    }
}

 

 

xml格式数据交互

var xmlhttp;
function verify() {
    var userName = document.getElementById("userName").value;
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
        if (xmlhttp.overrideMimeType) {
            xmlhttp.overrideMimeType("text/xml");
        }
    } else if (window.ActiveXObject) {
        var activeName = ["MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
        for (var i = 0; i < activeName.length; i++) {
            try {
                xmlhttp = new ActiveXObject(activeName[i]);
                break;
            } catch (e) {
            }
        }
    }
    if (!xmlhttp) {
        alert("创建失败");
        return;
    }

    xmlhttp.onreadystatechange = callback;
    xmlhttp.open("GET", "AjaxXMLServlet?name=" + userName, true);
    xmlhttp.send(null);
}

function callback() {
    if (xmlhttp.readyState == 4) {
        if (xmlhttp.status == 200) {
            var domObj = xmlhttp.responseXML;
            if (domObj) {
                var messageNodes = domObj.getElementsByTagName("message");
                if (messageNodes.length > 0) {
                    var textNode = messageNodes[0].firstChild;
                    var responseMessage = textNode.nodeValue;
                    var divNode = document.getElementById("result");
                    divNode.innerHTML = responseMessage;
                } else {
                    alert("有问题了!" + xmlhttp.responseText);
                }
            } else {
                alert("有问题了!" + xmlhttp.responseText);
            }
        }
    }
}

 

jquery  xml格式数据交互

 

function verify(){
    var jqueryObj = $("#userName");
    var userName = jqueryObj.val();
    //javascript中一个简单对象的定义方法:
    //var obj = {name:"haha",age:12};
    $.ajax({
        type:"POST",
        url:"AjaxXMLServlet",
        data:"name="+userName,
        dataType:"xml",
        success:callback,
        error:handleError
    });
}

function handleError(XMLHttpRequest, textStatus, errorThrown){
     alert(textStatus);
}

function callback(data){

    //首先要把dom对象转换为jquery对象
    var jqueryObj = $(data);
    var message = jqueryObj.children();
    var text = message.text();
    var resultObj = $("#result");
    resultObj.html(text);
}

 

 解决XHR与图片缓存问题

IE对于相同的url默认从缓存读取

方法:添加时间戳

function convertURL(url){
    var timestamp = (new Date()).valueOf();
    if(url.indexOf("?")>=0){
        url = url + "&t=" + timestamp;
    }else{
        url = url + "?t=" + timestamp;
    }
    return url;
}

 

 

解决Ajax中文乱码

 

1、页面端做一次encodeURI:

 var url = "AjaxServer?name="+encodeURI(userName);

     服务器端:

String name = new String(old.getBytes("ISO8859-1"),"UTF-8");

 

 2、页面端做两次encodeURI:

 var url = "AjaxServer?name=" + encodeURI(encodeURI(userName));

 

      服务器端:

  String name = URLDecoder.decode(old,"UTF-8");

 

解决Ajax跨域访问问题

 

 代理服务器

 

 

传送Text的Servlet

 

public class AjaxServer extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        String old = request.getParameter("name");
//        String name = new String(old.getBytes("ISO8859-1"),"UTF-8");
        String name = URLDecoder.decode(old,"UTF-8");
        if(old == null || old.length() == 0){
            out.println("用户名不能为空");
        }else{
//            String name = old;
            if(name.equals("liaolitao")){
                out.println(name+"已经存在");
            }else{
                out.println(name+"尚未存在,可以注册");
            }
        }
    }
}

 

 

传送xml的Servlet

 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/xml;charset=utf-8");
        PrintWriter out = response.getWriter();
        String old = request.getParameter("name");

        StringBuilder builder = new StringBuilder();
        builder.append("<message>");
        if(old == null || old.length() == 0){
            builder.append("用户名不能为空").append("<message>");
        }else{
            String name = old;
            if(name.equals("liaolitao")){
                builder.append(name+"已经存在").append("</message>");
            }else{
                builder.append(name+"尚未存在,可以注册").append("</message>");
            }
            out.println(builder.toString());
        }
    }

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics