ajax+ashx返回值詳解

changuncle發表於2017-07-09

做Asp.Net網站開發,少不了使用ajax技術,我平時也經常用ajax但總覺得了解的不透徹,今天在這裡總結一下,也給有需要的人提供一點幫助。前臺我不太理解的是dataType=text和dataType=json有啥區別,後臺我想搞清楚能不序列化直接返回物件嗎?下面將揭曉答案。

後臺返回string

後臺程式碼:

public void ProcessRequest(HttpContext context)
{
    try
    {
        string action = context.Request.Form["action"];
        string param1 = context.Request.Form["param1"];
        switch (action)
        {
            case "getString":
                //【1】轉化成json返回
                context.Response.Write(JsonHelper.Serialize(GetString()));
                //【2】直接返回
                //context.Response.Write(GetString());                        
                break;
            default:
                break;
        }
    }
    catch (Exception ex)
    {
        context.Response.Write("error");
    }
}

private string GetString()
{
    return "abcde";
}

前臺程式碼dataType=text:

function GetStringText() {
    $.ajax({
        type: "post",
        url: "Handler1.ashx",
        contentType: "application/x-www-form-urlencoded;charset=utf-8;",
        data: { action: "getString", param1: "aaa" },
        dataType: "text",
        success: function(data) {
            //【1】後臺資料轉化成json字串
            alert("data=" + data);
        },
        error: function(error) {
            alert("error=" + error);
        }
    });
}

後臺資料進行json序列化,dataType=text執行截圖:
這裡寫圖片描述
後臺資料直接返回,dataType=text執行截圖:
這裡寫圖片描述
前臺程式碼dataType=json:

function GetStringJosn() {
    $.ajax({
        type: "post",
        url: "Handler1.ashx",
        contentType: "application/x-www-form-urlencoded;charset=utf-8;",
        data: { action: "getString", param1: "aaa" },
        dataType: "json",
        success: function (data) {
            //【1】後臺資料轉化成json字串
            alert("data=" + data);

            //【2】後臺資料不進行轉化直接進入error處理分支
        },
        error: function (error) {
            alert("error=" + error);
        }
    });
}

後臺資料進行json序列化,dataType=json執行截圖:
這裡寫圖片描述
後臺資料直接返回,dataType=json執行截圖:
這裡寫圖片描述

後臺返回string[]

後臺程式碼:

public void ProcessRequest(HttpContext context)
{
    try
    {
        string action = context.Request.Form["action"];
        string param1 = context.Request.Form["param1"];
        switch (action)
        {
            case "getArray":
                //【1】轉化成json返回
                context.Response.Write(JsonHelper.Serialize(GetArray()));
                //【2】直接返回
                //context.Response.Write(GetArray());                        
                break;
            default:
                break;
        }
    }
    catch (Exception ex)
    {
        context.Response.Write("error");
    }
}

private string[] GetArray()
{
    string[] array = {"aaa", "bbb", "ccc", "ddd", "eee"};
    return array;
}

前臺程式碼dataType=text:

function GetArrayText() {
    $.ajax({
        type: "post",
        url: "Handler1.ashx",
        contentType: "application/x-www-form-urlencoded;charset=utf-8;",
        data: { action: "getArray", param1: "aaa" },
        dataType: "text",
        success: function(data) {
            //【1】後臺資料轉化成json字串
            var json = eval('(' + data + ')');
            alert("data=" + data + "\r\n" +
                "json[0]=" + json[0] + "\r\n" +
                "json[1]=" + json[1] + "\r\n" +
                "json[2]=" + json[2]);

            //【2】後臺資料不進行轉化data="System.string[]"
            //alert("data=" + data + "\r\n" +
            //    "data[0]=" + data[0] + "\r\n" +
            //    "data[1]=" + data[1] + "\r\n" +
            //    "data[2]=" + data[2]);
        },
        error: function(error) {
            alert("error=" + error);
        }
    });
}

後臺資料進行json序列化,dataType=text執行截圖:
這裡寫圖片描述
後臺資料直接返回,dataType=text執行截圖:
這裡寫圖片描述
前臺程式碼dataType=json:

function GetArrayJosn() {
    $.ajax({
        type: "post",
        url: "Handler1.ashx",
        contentType: "application/x-www-form-urlencoded;charset=utf-8;",
        data: { action: "getArray", param1: "aaa" },
        dataType: "json",
        success: function (data) {
            //【1】後臺資料轉化成json字串                    
            alert("data=" + data + "\r\n" +
                "data[0]=" + data[0] + "\r\n" +
                "data[1]=" + data[1] + "\r\n" +
                "data[2]=" + data[2]);

            //【2】後臺資料不進行轉化直接進入error處理分支

        },
        error: function (error) {
            alert("error=" + error);
        }
    });
}

後臺資料進行json序列化,dataType=json執行截圖:
這裡寫圖片描述
後臺資料直接返回,dataType=json執行截圖:
這裡寫圖片描述

後臺返回Dictionary

後臺程式碼:

public void ProcessRequest(HttpContext context)
{
    try
    {
        string action = context.Request.Form["action"];
        string param1 = context.Request.Form["param1"];
        switch (action)
        {
            case "getDictionary":
                //【1】轉化成json返回
                context.Response.Write(JsonHelper.Serialize(GetDictionary()));
                //【2】直接返回
                //context.Response.Write(GetDictionary());                        
                break;
            default:
                break;
        }
    }
    catch (Exception ex)
    {
        context.Response.Write("error");
    }
}

private Dictionary<string,object> GetDictionary()
{
    Dictionary<string, object> dict = new Dictionary<string, object>()
    {
        {"name","guo"},
        {"age",18},
        {"address","唐寧街十號"}
    };
    return dict;
}

前臺程式碼dataType=text:

function GetDictionaryText() {
    $.ajax({
        type: "post",
        url: "Handler1.ashx",
        contentType: "application/x-www-form-urlencoded;charset=utf-8;",
        data: { action: "getDictionary", param1: "aaa" },
        dataType: "text",
        success: function(data) {
            //【1】後臺資料轉化成json字串
            var json = eval('(' + data + ')');
            alert("data=" + data + "\r\n" +
                "json=" + json + "\r\n" +
                "json[name]=" + json["name"] + "\r\n" +
                "json[age]=" + json["age"] + "\r\n" +
                "json[address]=" + json["address"]);

            //【2】後臺資料不進行轉化
            //alert("data=" + data + "\r\n" +
            //    "data[0]=" + data[0] + "\r\n" +
            //    "data[1]=" + data[1] + "\r\n" +
            //    "data[2]=" + data[2]);
        },
        error: function(error) {
            alert("error=" + error);
        }
    });
}

後臺資料進行json序列化,dataType=text執行截圖:
這裡寫圖片描述
後臺資料直接返回,dataType=text執行截圖:
這裡寫圖片描述
前臺程式碼dataType=json:

function GetDictionaryJosn() {
    $.ajax({
        type: "post",
        url: "Handler1.ashx",
        contentType: "application/x-www-form-urlencoded;charset=utf-8;",
        data: { action: "getDictionary", param1: "aaa" },
        dataType: "json",
        success: function (data) {
            //【1】後臺資料轉化成json字串
            alert("data=" + data + "\r\n" +
                "data[name]=" + data["name"] + "\r\n" +
                "data[age]=" + data["age"] + "\r\n" +
                "data[address]=" + data["address"]);

            //【2】後臺資料不進行轉化直接進入error處理分支
        },
        error: function (error) {
            alert("error=" + error);
        }
    });
}

後臺資料進行json序列化,dataType=json執行截圖:
這裡寫圖片描述
後臺資料直接返回,dataType=json執行截圖:
這裡寫圖片描述

後臺返回class

後臺程式碼:

public void ProcessRequest(HttpContext context)
{
    try
    {
        string action = context.Request.Form["action"];
        string param1 = context.Request.Form["param1"];
        switch (action)
        {
            case "getClass":
                //【1】轉化成json返回
                context.Response.Write(JsonHelper.Serialize(GetClass()));
                //【2】直接返回
                //context.Response.Write(GetClass());                        
                break;
            default:
                break;
        }
    }
    catch (Exception ex)
    {
        context.Response.Write("error");
    }
}

private Student GetClass()
{
    Student objStudent = new Student()
    {
        Name = "guo",
        Age = 18
    };
    return objStudent;
}

前臺程式碼dataType=text:

function GetClassText() {
    $.ajax({
        type: "post",
        url: "Handler1.ashx",
        contentType: "application/x-www-form-urlencoded;charset=utf-8;",
        data: { action: "getClass", param1: "aaa" },
        dataType: "text",
        success: function (data) {
            //【1】後臺資料轉化成json字串
            var json = eval('(' + data + ')');
            alert("data=" + data + "\r\n" +
                "json=" + json + "\r\n" +
                "json[Name]=" + json["Name"] + "\r\n" +
                "json[Age]=" + json["Age"]);

            //【2】後臺資料不進行轉化
            //alert("data=" + data + "\r\n" +
            //    "data[0]=" + data[0] + "\r\n" +
            //    "data[1]=" + data[1] + "\r\n" +
            //    "data[2]=" + data[2]);
        },
        error: function (error) {
            alert("error=" + error);
        }
    });
}

後臺資料進行json序列化,dataType=text執行截圖:
這裡寫圖片描述
後臺資料直接返回,dataType=text執行截圖:
這裡寫圖片描述
前臺程式碼dataType=json:

function GetClassJosn() {
    $.ajax({
        type: "post",
        url: "Handler1.ashx",
        contentType: "application/x-www-form-urlencoded;charset=utf-8;",
        data: { action: "getClass", param1: "aaa" },
        dataType: "json",
        success: function (data) {
            //【1】後臺資料轉化成json字串
            alert("data=" + data + "\r\n" +
                "data[Name]=" + data["Name"] + "\r\n" +
                "data[Age]=" + data["Age"]);

            //【2】後臺資料不進行轉化直接進入error處理分支
        },
        error: function (error) {
            alert("error=" + error);
        }
    });
}

後臺資料進行json序列化,dataType=json執行截圖:
這裡寫圖片描述
後臺資料直接返回,dataType=json執行截圖:
這裡寫圖片描述

後臺返回json字串

後臺程式碼:

public void ProcessRequest(HttpContext context)
{
    try
    {
        string action = context.Request.Form["action"];
        string param1 = context.Request.Form["param1"];
        switch (action)
        {
            case "getJson":
                //【1】轉化成json返回
                context.Response.Write(JsonHelper.Serialize(GetJson()));
                //【2】直接返回
                //context.Response.Write(GetJson());                        
                break;
            default:
                break;
        }
    }
    catch (Exception ex)
    {
        context.Response.Write("error");
    }
}

private string GetJson()
{
    string json = "{\"name\":\"guo\",\"age\":\"18\",\"content\":{\"phone\":\"18233199999\",\"address\":\"唐寧街十號\"}}";            
    return json;
}

前臺程式碼dataType=text:

function GetJsonText() {
    $.ajax({
        type: "post",
        url: "Handler1.ashx",
        contentType: "application/x-www-form-urlencoded;charset=utf-8;",
        data: { action: "getJson", param1: "aaa" },
        dataType: "text",
        success: function(data) {
            //【1】後臺資料轉化成json字串
            var json = eval('(' + data + ')');
            json = eval('(' + json + ')');
            alert("data=" + data + "\r\n" +
                "json=" + json + "\r\n" +
                "json[name]=" + json["name"] + "\r\n" +
                "json[age]=" + json["age"] + "\r\n" +
                "json[content]=" + json["content"] + "\r\n" +
                "json[content][phone]=" + json["content"]["phone"] + "\r\n" +
                "json[content][address]=" + json["content"]["address"]);

            //【2】後臺資料不進行轉化
            //var json = eval('(' + data + ')');
            //alert("data=" + data + "\r\n" +
            //    "json=" + json + "\r\n" +
            //    "json[name]=" + json["name"] + "\r\n" +
            //    "json[age]=" + json["age"] + "\r\n" +
            //    "json[content]=" + json["content"] + "\r\n" +
            //    "json[content][phone]=" + json["content"]["phone"] + "\r\n" +
            //    "json[content][address]=" + json["content"]["address"]);
        },
        error: function(error) {
            alert("error=" + error);
        }
    });
}

後臺資料進行json序列化,dataType=text執行截圖:
這裡寫圖片描述
後臺資料直接返回,dataType=text執行截圖:
這裡寫圖片描述
前臺程式碼dataType=json:

function GetJsonJosn() {
    $.ajax({
        type: "post",
        url: "Handler1.ashx",
        contentType: "application/x-www-form-urlencoded;charset=utf-8;",
        data: { action: "getJson", param1: "aaa" },
        dataType: "json",
        success: function (data) {
            //【1】後臺資料轉化成json字串
            var json = eval('(' + data + ')');
            alert("data=" + data + "\r\n" +
                "json=" + json + "\r\n" +
                "json[name]=" + json["name"] + "\r\n" +
                "json[age]=" + json["age"] + "\r\n" +
                "json[content]=" + json["content"] + "\r\n" +
                "json[content][phone]=" + json["content"]["phone"] + "\r\n" +
                "json[content][address]=" + json["content"]["address"]);

            //【2】後臺資料不進行轉化
            //alert("data=" + data + "\r\n" +
            //    "data[name]=" + data["name"] + "\r\n" +
            //    "data[age]=" + data["age"] + "\r\n" +
            //    "data[content]=" + data["content"] + "\r\n" +
            //    "data[content][phone]=" + data["content"]["phone"] + "\r\n" +
            //    "data[content][address]=" + data["content"]["address"]);
        },
        error: function (error) {
            alert("error=" + error);
        }
    });
}

後臺資料進行json序列化,dataType=json執行截圖:
這裡寫圖片描述
後臺資料直接返回,dataType=json執行截圖:
這裡寫圖片描述
注意:
JsonHelper幫助類的下載地址是:https://download.csdn.net/download/xiaouncle/11107625

相關文章