• 生成一次请求
    要生成一次请求,要通过浏览器能力检测来实例化一个新对象,并调用open()和send()方法:
    function stateChangeListener()
    {
        //Some Codes
    }
    
    var request=false;
    if(window.XMLHttpRequest)
    {
        request=new window.XMLHttpRequest();
    }
    else if(window.ActiveXObject)
    {
        request=new window.ActiveXObject("Microsoft.XMLHTTP");
    }
    
    if(request)
    {
        request.onreadystatechange=stateChangeListener;
        request.open('GET','/your/script/hellp.ashx?p1=value1&p2=value2',true);
        request.send(null);
    }

    对于GET请求,方法send的参数应该为null。如果要执行一次POST请求,那么应该讲POST作为方法open的第一个参数,并通过send()方法在请求主体中包含传入变量,而不是包含在URL中:

    request.open('POST','/your/script/hellp.ashx',true);
    request.send(‘p1=value1&p2=value2’);
  • 处理响应
    前面为请求对象的onreadystatechange属性指定了stateChangeListener()方法,该方法会在不同的阶段被调用几次,这个方法可以通过访问下列XMLHttpRequest对象的属性来与请求进行交互。
    ○ readyState是一个表示下列状态的整数值:
             ■ 0:尚未初始化
             ■ 1:载入中
             ■ 2:载入完成
             ■ 3:交互
             ■ 4:交互完成
    ○ responseText是一个响应中返回的字符串
    ○ responseXML是一个兼容DOM核心的文档对象
    ○ status是一个表示请求状态的数字代码。(HTTP状态协议代码)
    ○ statusText是与状态代码相关的一条信息。
    ○ onreadystatechange是一个在不同的请求阶段被执行的方法。


    实现前一步中的stateChangeListener:
    function stateChangeListener()
    {
        switch(request.readyState)
            case 1:
                //载入中
                break;
            case 2:
                //载入完成
                break;
            case 3:
                //交互
                break;
            case 4:
                //完成
                if(request.status==200)
                {
                    //对request.responseText或者request.responseXML进行处理
                }
                else
                {
                    //对request.status或者request.statusText进行处理
                }
                break;        
    
    }

          当通过XMLHttpRequest来发起Ajax异步调用的时候,返回的结果必须通过onreadystatechange来调用,下面的代码是不能按照计划运行的:
         

request.open('GET','/your/script/hellp.ashx?p1=value1&p2=value2',true);
request.send(null);
alert(request.responseText);

        因为发起请求的模式是异步的,open()函数的第三个参数为true,当XMLHttpRequest处于异步模式时,请求会被异步发送,因此alert可能会在响应之前被执行(显示一个空值)。

posted on 2012-09-19 16:09  诡异的手柄  阅读(152)  评论(0编辑  收藏  举报