JS原生ajax與Jquery插件ajax深入學習


  • 序言

     近來隨着項目的上線實施,稍微有點空閑,閑暇之時偶然發現之前寫的關於javascript原生xmlHttpRequest ajax方法以及后來jquery插件ajax方法,於是就行了一些總結,因時間原因,並未在所有瀏覽器上進行測試,目前測試的IE8,9,10,Google Chrome,Mozilla Firefox,Opera常用幾款,如大家在進行驗證測試發現有問題,請及時反饋與我,謝謝大家。

言歸正傳,不說廢話直接上代碼:

  • 前端代碼 
  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Ajax練習</title>
        <script src="/Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
        <style type="text/css">
        label{width:50px;display:inline-block;}
        </style>
    </head>
    <body>
    <div id="contentDiv">
        <h2>html5表單元素</h2>
        <label>E-mail</label><input type="email" name="UserEmail" id="UserEmail" value="251608027@qq.com" /><br />
        <label>URL:</label><input type="url" name="UserURL" id="UserURL" value="http://www.baidu.com" /><br />
        <label>Number:</label><input type="number" name="UserNumber" id="UserNumber" min="1" max="100" value="87" /><br />
        <label>Range:</label><input type="range" name="UserRange" min="1" max="100" value="78" /><br />
        <label>Date:</label><input type="date" name="UserDate" id="UserDate" value="2015-12-01" /><br />
        <label>Search:</label><input type="search" name="UserSearch" id="UserSearch" value="search" /><br />
        <label id="lblMsg" style="color:Red; width:100%;"></label><br />
        <input type="button" id="btnXmlHttp" value="提 交" onclick="return xmlPost();" />
        <input type="button" id="btnAjax" value="Ajax提 交" onclick="return Ajax();" />
        <input type="button" id="btnPost" value="Post提 交" onclick="return Post();" />
        <input type="button" id="btnGet" value="Get提 交" onclick="return Get();" />
        <input type="button" id="btnGetJSON" value="GetJSON提 交" onclick="return GetJSON();" />
        <input type="button" id="btnCustom" value="Custom提 交" onclick="return Custom();" />
        <br /><label id="lblAD" style="color:Red; width:100%;">.NET技術交流群:70895254,歡迎大家</label>
        <script type="text/javascript">
            //基礎數據
            var jsonData = {
                UserEmail: $("#UserEmail").val(),
                UserURL: $("#UserURL").val(),
                UserNumber: $("#UserNumber").val(),
                UserRange: $("#UserRange").val(),
                UserDate: $("#UserDate").val(),
                UserSearch: $("#UserSearch").val()
            };
            //統一返回結果處理
            function Data(data, type) {
                if (data && data.length > 0) {
                    var lblMsg = "";
                    for (i = 0; i < data.length; i++) {
                        for (var j in data[i]) {
                            lblMsg += j + "" + data[i][j];
                            if (j != "Name" && j != "UserSearch") { lblMsg += "" }
                        }
                        if (i != data.length) { lblMsg += ""; }
                    }
                    $("#lblMsg").html(type + "請求成功,返回結果:" + lblMsg);
                }
            }
        </script>
        <script type="text/javascript">
            //javascript 原生ajax方法
            function createXMLHttp() {
                var XmlHttp;
                if (window.ActiveXObject) {
                    var arr = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp", "Microsoft.XMLHttp"];
                    for (var i = 0; i < arr.length; i++) {
                        try {
                            XmlHttp = new ActiveXObject(arr[i]);
                            return XmlHttp;
                        }
                        catch (error) { }
                    }
                }
                else {
                    try {
                        XmlHttp = new XMLHttpRequest();
                        return XmlHttp;
                    }
                    catch (otherError) { }
                }
            }        
            function xmlPost() {
                var xmlHttp = createXMLHttp();
                var queryStr = "Ajax_Type=Email&jsonData=" + JSON.stringify(jsonData);
                var url = "/Handler/AjaxHandlerHelper.ashx?no.=" + Math.random();
                xmlHttp.open('Post', url, true);
                xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                xmlHttp.send(queryStr);
                xmlHttp.onreadystatechange = function () {
                    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                        var data = eval(xmlHttp.responseText);
                        Data(data, "javascript原生xmlHttp");
                    }
                }
            }
        </script>
        <script type="text/javascript">
            //jquery $.ajax方法
            function Ajax() {
                $.ajax({
                    url: "/Handler/AjaxHandlerHelper.ashx?no.=" + Math.random(),
                    type: "Post",
                    async: false,
                    data: {
                        Ajax_Type: "Email",
                        jsonData: JSON.stringify(jsonData)
                    },
                    dataType: "json",
                    beforeSend: function () { //發送請求前 
                        $("#btnPost").attr('disabled', "true");
                    },
                    complete: function () { //發送請求完成后
                        $("#btnPost").removeAttr("disabled");
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        alert("error!" + errorThrown);
                        //alert("請求錯誤,請重試!");
                    },
                    success: function (data) {
                        Data(data, "Jquery $.ajax");
                    }
                });
            }
            //jquery $.post方法
            function Post() {
                $.post("/Handler/AjaxHandlerHelper.ashx?no.=" + Math.random(),
                    {
                        Ajax_Type: "Email",
                        jsonData: JSON.stringify(jsonData)
                    },
                    function (data) {
                        Data(data, "Jquery $.post");
                    }
                );
                }
            //jquery $.getJSON方法
            function GetJSON() {
                $.getJSON("/Handler/AjaxHandlerHelper.ashx?no.=" + Math.random(),
                    {
                        Ajax_Type: "Email",
                        jsonData: JSON.stringify(jsonData)
                    },
                    function (data) {
                        Data(data, "Jquery $.getJSON");
                    }
                );
                }
            //jquery $.get方法
            function Get() {
                $.get("/Handler/AjaxHandlerHelper.ashx?no.=" + Math.random(),
                    {
                        Ajax_Type: "Email",
                        jsonData: JSON.stringify(jsonData)
                    },
                    function (data) {
                        Data(data, "Jquery $.get");
                    }
                );
            }
        </script>
        <script type="text/javascript">
            //javascript原生腳本自定義jquery $.ajax方法
            var CustomAjax = function (custom) {
                // 初始化
                var type = custom.type; //type參數,可選            
                var url = custom.url; //url參數,必填            
                var data = custom.data; //data參數可選,只有在post請求時需要                
                var dataType = custom.dataType; //datatype參數可選            
                var success = custom.success; //回調函數可選
                var beforeSend = custom.beforeSend; //回調函數可選
                var complete = custom.complete; //回調函數可選
                var error = custom.error; //回調函數可選
                if (type == null) {//type參數可選,默認為get
                    type = "get";
                }
                if (dataType == null) {//dataType參數可選,默認為text
                    dataType = "text";
                }
                var xmlHttp = createXMLHttp(); // 創建ajax引擎對象
                xmlHttp.open(type, url, true); // 打開
                // 發送
                if (type == "GET" || type == "get" || type == "Get") {//大小寫
                    xmlHttp.send(null);
    
                }
                else if (type == "POST" || type == "post" || type == "Post") {
                    xmlHttp.setRequestHeader("content-type", "application/x-www-form-urlencoded");
                    xmlHttp.send(data);
                }
                xmlHttp.onreadystatechange = function () {
                    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                        if (dataType == "text" || dataType == "TEXT") {
                            if (success != null) {
                                //普通文本
                                success(xmlHttp.responseText);
                            }
                        } else if (dataType == "xml" || dataType == "XML") {
                            if (success != null) {
                                //接收xml文檔    
                                success(xmlHttp.responseXML);
                            }
                        } else if (dataType == "json" || dataType == "JSON") {
                            if (success != null) {
                                //將json字符串轉換為js對象  
                                success(eval("(" + xmlHttp.responseText + ")"));
                            }
                        }
                    }
                };
            };
            //自定義方法
            function Custom() {
                CustomAjax({
                    type: "Post",
                    url: "/Handler/AjaxHandlerHelper.ashx?no.=" + Math.random(),
                    data: "Ajax_Type=Email&jsonData=" + JSON.stringify(jsonData),
                    dataType: "json",
                    success: function (data) {
                        Data(data, "Custom自定義");
                    }
                });
            }
        </script>
    </div>
    </body>
    </html>

     

  • .ashx后端代碼
  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Script.Serialization;
    using System.Runtime.Serialization.Json;
    using System.IO;
    using System.Text;
    
    
    namespace WebHTML5.Handler
    {
        /// <summary>
        /// AjaxHandlerHelper 的摘要說明
        /// </summary>
        public class AjaxHandlerHelper : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "application/json";
                //context.Response.Charset = "utf-8";
                var Ajax_Type = context.Request.QueryString["Ajax_Type"] == null ?
                    context.Request.Form["Ajax_Type"] : context.Request.QueryString["Ajax_Type"];
                switch (Ajax_Type) 
                {
                    case "Email":
                        context.Response.Write(PostEmail(context));
                        break;
                    default:
                        context.Response.Write("[{\"Age\":28,\"Name\":\"張鵬飛\"}]");
                        break;
                }
            }
    
            public static string PostEmail(HttpContext context)
            {
                string semail = string.Empty;
                if (context.Request.HttpMethod == "GET")
                {
                    semail = "[" + context.Request.QueryString["jsonData"] + "]";
                }
                else
                {
                    semail = "[" + context.Request.Form["jsonData"] + "]";
                }
                return semail;
            }
    
            /// <summary>
            /// JSON序列化
            /// </summary>
            public static string JsonSerializer<T>(T t)
            {
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
                MemoryStream ms = new MemoryStream();
                ser.WriteObject(ms, t);
                string jsonString = Encoding.UTF8.GetString(ms.ToArray());
                ms.Close();
                return jsonString;
            }
    
           /// <summary>
           /// JSON反序列化
           /// </summary>
           public static T JsonDeserialize<T>(string jsonString)
           {
               DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
               MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
               T obj = (T)ser.ReadObject(ms);
               return obj;
           }
    
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }

     

  • Jquery 方法擴展

  關於Jquery的方法擴展大家自行google或百度;

  • 結束語

說明一下情況:案例中出現的html5 range標簽的取值問題,寫的不對,大家不要在意這些,關於range標簽如何取值大家自行google或百度;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM