JQuery以POST方法從ASP.NET服務器獲取Json數據完整示例


      最近學習JQuery,用到了它的POST方法向服務器請求數據,服務器返回Json格式的數據。看上去非常簡單,但出了很多莫名其妙的問題。主要原因就是第一次學習太生疏,很多地方寫的不規范造成的。這方面的資料雖然可以從網上查到,但是百花齊放,怎么寫的都有,在此,我就以標准的格式寫一個例子,希望對大家有幫助,也給自己留着備用。

      本文適合有一定JQuery、ASP.NET基礎的讀者閱讀。

      在寫例子之前,還要啰嗦些重點內容:

      無論何種客戶端,向服務器傳遞數據都有兩種方式:GET方法和POST方法。GET方法傳遞的數據直接寫在URL上,比如:http://www.kpdown.com/soft/download.asp?softid=805&downid=3&id=711這個請求就包含了三個參數。優點是使用方便,一目了然;缺點是傳遞的數據有限,而且不安全。而POST方法,則要通過特定的函數來執行,無論什么語言,無論什么函數,只要是POST,一般會有這幾個參數:POST地址、POST數據、返回值(回調函數)、HTTP頭信息、返回數據格式等。POST的優點是數據量大,安全。

      對於服務器端,以ASP.NET為例,如果想要得到GET方法傳遞過來的參數,可以用Request.QueryString[“參數名”]來獲取;如果向得到POST方法傳遞過來的數據,可以用Request.Form[“參數名”]來獲取。向客戶端返回數據可以簡單的用Response.Write()方法。

      對於Json,這是一種數據格式。能夠方便快速的被解析,可以匹敵XML。網絡上有很多關於它的知識,但是寫法很不規范,很容易給初學者造成困惑,更嚴重的是造成程序莫名其妙的出錯,最常見的錯誤:POST回調函數不執行。這個困擾了許多人的問題,一般都是由於Json數據格式不對造成的。在本例中會用最規范的方式展示如何使用Json數據。我在這貼一個簡單易懂的圖,相信理解能力強的看完圖就不用看例子了。(具體關於Json的知識,請參閱權威網站:http://www.w3school.com.cn/json/index.asp




 

      在本例中以HTML靜態網頁作為前台頁面,不可以用.NET的aspx,因為我們的POST是從JavaScript中發出的,非ASP.NET自身發出,會被ASP.NET屏蔽,一定要注意。本例以ASP.NET的一般處理程序ashx作為服務器,在JavaScript中調用JQuery框架的POST方法,向服務器請求Json數據,並將請求到的Json數據解析,插入到HTML頁面中。本例模擬了一個查詢功能,輸入正確的用戶名、密碼,即可獲得所有員工的基本信息以及備注信息。展示了一個完整的HTML調用JQuery與ASP.NET服務器交互的例子。


初始頁面:



輸入正確頁面:



輸入錯誤頁面:



HTML前台代碼:

<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>服務器交互實例</title>
    <script src="js/jquery.js" type="text/javascript"></script>
    <script src="js/Verification.js" type="text/javascript"></script>
</head>

<body>
    <div class="operater">
        <p>用戶名:<input ID="txtUserName" type="text"></p>
        <p>密 碼:<input ID="txtPassWord" type="text"></p>
           
       <input ID="btnSubmit" type="button" value="提交">
           
       <input ID="btnReset" type="button" value="重置">
    </div>
    <div>
        <h4>所有員工:</h4>
        <ul class="worker">
        </ul>
        <h4>備注信息:</h4>
        <ul class="remarksMessage">
        </ul>
    </div>  
</body>
</html>


JavaScript代碼(Verification.js):

$(document).ready(function () {
    var txtUserName = $("#txtUserName"); //保存文本框對象,提高效率
    var txtPassWord = $("#txtPassWord");

    //注冊提交按鈕單擊事件
    $("#btnSubmit").click(function () {
        if ("" != txtUserName.val() && "" != txtPassWord.val()) { //簡單的驗證放在客戶端,減少服務器壓力
            //利用post方式向服務器請求數據
            $.post("getUserMessage.ashx?t=" + Math.random(), { userName: txtUserName.val(), userPassWord: txtPassWord.val() }, function (json) {
                if (json) {
                    if (0 != json.worker.length) {
                        $(".worker li").remove(); //移除所有員工列表下的li標記
                        //遍歷json中的worker數組,獲取所有員工
                        for (var i = 0; i < json.worker.length; i++) {
                            $("<li>姓名:" + json.worker[i].name + ",性別:" + json.worker[i].sex + ",年齡:" + json.worker[i].age + "</li>").appendTo(".worker"); //從json中讀取數據,構造一個li標簽,插入到ul標簽中
                        }
                    } else {
                        $(".worker li").remove();
                        $("<li>暫無數據或驗證失敗!</li>").appendTo(".worker");
                    }
                    if (0 != json.remarksMessage.length) {
                        $(".remarksMessage li").remove();
                        //遍歷json中的remarksMessage數組,獲取備注信息
                        for (var i = 0; i < json.remarksMessage.length; i++) {
                            $("<li>" + json.remarksMessage[i].remarks + "</li>").appendTo(".remarksMessage");
                        }
                    } else {
                        $(".remarksMessage li").remove();
                        $("<li>暫無數據或驗證失敗!</li>").appendTo(".remarksMessage");
                    }
                } else {
                    $("li").remove();
                    $("<li>暫無數據或驗證失敗!</li>").appendTo(".worker");
                    $("<li>暫無數據或驗證失敗!</li>").appendTo(".remarksMessage");
                }

            }, "json");
        } else {
            alert("輸入非法!");
        }
    });

    //注冊重置按鈕單擊事件
    $("#btnReset").click(function () {
        txtUserName.val("");
        txtPassWord.val("");
    });
});


服務器代碼(getUserMessage.ashx):

<%@ WebHandler Language="C#" Class="getUserMessage" %>

using System;
using System.Web;

public class getUserMessage : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        //獲取GET方法傳遞參數:Request.QueryString["參數名稱"];
        //獲取POST方法傳遞參數:Request.Form["參數名稱"];
        //本例使用的POST方法
        context.Response.ContentType = "application/json"; //指定返回數據格式為json
        string userName = context.Request.Form["userName"]; //讀取post過來的數據
        string userPassWord = context.Request.Form["userPassWord"];
        string jsonResult=null;

        if ("admin" == userName && "123" == userPassWord)
        {
            //json數據標准格式
            jsonResult = "{\"worker\":" +
                     "[" +
                     "{\"name\":\"張三\",\"sex\":\"男\",\"age\":\"25\"}," +
                     "{\"name\":\"李四\",\"sex\":\"女\",\"age\":\"21\"}," +
                     "{\"name\":\"王五\",\"sex\":\"男\",\"age\":\"27\"}" +
                     "]," +
                     "\"remarksMessage\":" +
                     "[" +
                     "{\"remarks\":\"普通員工\"}" +
                     "]}";
        }
        context.Response.Write(jsonResult);//向客戶端返回數據
        context.Response.End();
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }

}




免責聲明!

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



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