• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    AJAX客户端说明,XMLHttpRequest对象
    POST TIME:2021-10-18 06:25
    在CommunityServer中运用了自己的AJAX机制,没有借助其他的辅助控件。其中客户的XMLHttpRequest对象的封装,就足以让人大饱眼福,在一般的浏览器其都能够运行AJAX。下面我们来学习学习这个咚咚,希望能给更多的人带来帮助。

     首先当然是要了解一下浏览器中的XMLHttp对象了:

     XMLHTTP方法: 
             备注:客户机可以使用XMLHTTP对象发送任意的HTTP请求,接受HTTP应答,还可以对应答的XML文档进行解析。 

             Open方法:初始化一个Msxml2.XMLHTTP请求,指定HTTP请求方式、URL以及鉴定信息。

            语法:
             Open( bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword ) 

            参数介绍:

            bstrMethod: 数据传送方式,即GET或POST。 
             bstrUrl: 服务网页的URL。 
             varAsync: 是否同步执行。缺省为True,即同步执行,但只能在DOM中实施同步执行。用中一般将其置为False,即异步执行。 
             bstrUser: 用户名,可省略。 
             bstrPassword:用户口令,可省略。 

            Send方法:发送HTTP请求到服务器,返回应答。 

            语法: 
            oXMLHttpRequest.send(varBody) 

           说明:此方法是否同步取决于Open方法的varAsync参数。如果设为True则为同步,调用立刻返回,如果设为False调用直到整个应答被接收了才返回。 

            setRequestHeader( bstrHeader, bstrvalue )

            bstrHeader:HTTP 头(header) 
            bstrvalue: HTTP 头(header)的值 

           如果Open方法定义为POST,可以定义表单方式上传: 
           xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded") 

    XMLHTTP属性: 

     onreadystatechange:在同步执行方式下获得返回结果的事件句柄。只能在DOM中调用。 
     responseBody: 结果返回为无符号整数数组。 
     responseStream: 结果返回为IStream流。 
     responseText : 结果返回为字符串。 
     responseXML: 结果返回为XML格式数据。

     运用这个原理也可以做网络小偷程序,网络爬虫应该就是应用这个东西来完成的吧,不过我没有做过,可能在不久的将来会制作个来玩玩,这里我们最主要的是看看CS中是如何封装他的:

       1//Ajax Start
     2/**////summary>
     3///创建回调对象,如果存在window.XMLHttpRequest()对象,则返回此对象,如果是IE则搜索Msxml2.XMLHTTP各个版本及Microsoft.XMLHTTP并创建对象返回。
     4////summary>
     5function Ajax_GetXMLHttpRequest() {
     6    if (window.XMLHttpRequest) {
     7        return new XMLHttpRequest();
     8    } else {
     9        if (window.Ajax_XMLHttpRequestProgID) {
                return new ActiveXObject(window.Ajax_XMLHttpRequestProgID);
            } else {
                var progIDs = ["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
                for (var i = 0; i  progIDs.length; ++i) {
                    var progID = progIDs[i];
                    try {
                        var x = new ActiveXObject(progID);
                        window.Ajax_XMLHttpRequestProgID = progID;
                        return x;
                    } catch (e) {
                    }
                }
            }
        }
        return null;
    }
    /**////summary>
    ///Ajax回调。
    ////summary>
    ///param name="type">调用服务端函数所在的类包括命名空间(如:NExplus.Controls.SiteHeader)。/param>
    ///param name="id">客户端所对应的标记的ID(如:div id="ID">/div>)。/param>
    ///param name="method">服务端(方法)函数名称(被AjaxMethod标记)。/param>
    ///param name="args">传到服务器的字符串。/param>
    ///param name="clientCallBack">同步或异步回调。/param>
    ///param name="debugRequestText">调试/请求字符串。/param>
    ///param name="debugResponseText">调试/输出字符串。/param>
    ///param name="debugErrors">调试的错误信息。/param>
    ///param name="includeControlValuesWithCallBack">是否和控件及其值一起回调。/param>
    ///param name="url">Url地址。/param>
    function Ajax_CallBack(type, id, method, args, clientCallBack, debugRequestText, debugResponseText, debugErrors, includeControlValuesWithCallBack, url) {

        if (!url)
        {
            url = window.location.href;
            url = url.replace(/\#.*$/, '');//去除URL中标签部分,即"#"之后的字符串。
            //加入参数Ajax_CallBack并设为true,说明是AJAX回调。
            if (url.indexOf('?') > -1)
                url += "Ajax_CallBack=true";
            else
            {
                if (url.substr(url.length - 1, 1) == "/")
                    url += "default.aspx";

                url += "?Ajax_CallBack=true";
            }
        }

        var x = Ajax_GetXMLHttpRequest();//取得XMLHttpRequest对象。
        var result = null;
        if (!x) {
            result = { "value":null, "error": "NOXMLHTTP"};
            if (debugErrors) {
                alert("error: " + result.error);
            }
            if (clientCallBack) {
                clientCallBack(result);
            }
            return result;
        }

        x.open("POST", url, clientCallBack ? true : false);//以Post方式打开对象,这样在服务端就可以用Request.Form获取参数。
        x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
        if (clientCallBack) {
            //如果同步,判断状态,输出错误消息。
            x.onreadystatechange = function() {
                var result = null;

                if (x.readyState != 4) {
                    return;
                }

                if (debugResponseText) {
                    alert(x.responseText);
                }

                try
                {
                    var result = eval("(" + x.responseText + ")");
                    if (debugErrors  result.error) {
                        alert("error: " + result.error);
                    }
                }
                catch (err)
                {
                    if (window.confirm('The following error occured while processing an AJAX request: ' + err.message + '\n\nWould you like to see the response?'))
                    {
                        var w = window.open();
                        w.document.open('text/plain');
                        w.document.write(x.responseText);
                       w.document.close();
                   }

                   result = new Object();
                   result.error = 'An AJAX error occured.  The response is invalid.';
               }

               clientCallBack(result);            
           }
       }
       var encodedData = "Ajax_CallBackType=" + type;
       if (id) {
           encodedData += "Ajax_CallBackID=" + id.split("$").join(":");
       }
       encodedData += "Ajax_CallBackMethod=" + method;
       if (args) {
           for (var i in args) {
               encodedData += "Ajax_CallBackArgument" + i + "=" + encodeURIComponent(args[i]);
           }
       }
       //如果加入控件,则加入控件数据。
       if (includeControlValuesWithCallBack  document.forms.length > 0) {
           var form = document.forms[0];
           for (var i = 0; i  form.length; ++i) {
               var element = form.elements[i];
               if (element.name) {
                   var elementValue = null;
                   if (element.nodeName == "INPUT") {
                       var inputType = element.getAttribute("TYPE").toUpperCase();
                       if (inputType == "TEXT" || inputType == "PASSWORD" || inputType == "HIDDEN") {
                           elementValue = element.value;
                       } else if (inputType == "CHECKBOX" || inputType == "RADIO") {
                           if (element.checked) {
                               elementValue = element.value;
                           }
                       }
                   } else if (element.nodeName == "SELECT") {
                       elementValue = element.value;
                   } else if (element.nodeName == "TEXTAREA") {
                       elementValue = element.value;
                   }
                   if (elementValue) {
                       encodedData += "" + element.name + "=" + encodeURIComponent(elementValue);
                   }
               }
           }
       }
       //如果是调试,则弹出发送的数据。
       if (debugRequestText) {
           alert(encodedData);
       }
       x.send(encodedData);//向服务器发送数据。
       if (!clientCallBack) {
           if (debugResponseText) {
               alert(x.responseText);
           }
           result = eval("(" + x.responseText + ")");
           if (debugErrors  result.error) {
               alert("error: " + result.error);
           }
       }
       delete x;
       return result;
    }

    //Ajax End
     其他的不用多说明了,看注释应该就差不多了,如果有不对的地方请批评指教,谢谢!
    您可能感兴趣的文章:
    • jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
    • AJAX XMLHttpRequest对象详解
    • 解析ajax核心XMLHTTPRequest对象的创建与浏览器的兼容问题
    • 如何用ajax来创建一个XMLHttpRequest对象
    • jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
    • AJAX中同时发送多个请求XMLHttpRequest对象处理方法
    • AJax 学习笔记一(XMLHTTPRequest对象)
    • ajax 入门基础之 XMLHttpRequest对象总结
    • AJAX XMLHttpRequest对象创建使用详解
    上一篇:[ASP.NET Ajax] ECMAScript基础类以及Asp.net Ajax对类<Object>的扩展
    下一篇:[ASP.NET AJAX]Function对象及Type类的方法介绍
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信