jQuery+Ajax實現(xiàn)無刷新操作
使用jQuery實現(xiàn)Ajax操作
想要實現(xiàn)Ajax頁面無刷新效果,但是直接利用Ajax代碼實在有些麻煩,所以就想用jQuery實現(xiàn)。jQuery很好的封裝了Ajax的核心對象XMLHTTPRequest。所以用起來非常方便。
首先,創(chuàng)建服務(wù)器端代碼,這里用Servlet實現(xiàn)服務(wù)器端的數(shù)據(jù)處理;代碼如下:
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 設(shè)置編碼格式 resp.setContentType("text/html;charset=UTF-8"); // 創(chuàng)建輸出對象 PrintWriter out = resp.getWriter(); // 得到請求參數(shù) String name = req.getParameter("uname"); // 判斷 if (name == null || name.length() == 0) { out.println("用戶名不能為空!"); } else { // 判斷 if (name.equals("cheng")) { out.println("用戶名["+ name +"]已存在!請使用其他用戶名!"); } else { out.println("用戶名[" + name + "]尚未存在!您可以注冊!"); } } }
然后,創(chuàng)建JSP頁面,要使用jQuery,必須在頁面之中引入jQuery庫,也就是一個Javascript文件,另外還需引入自定義的Javascript文件,如下:
<!-- 引入Javascript文件 --> <script type="text/javascript" src="js/jquery-1.2.6.js"></script> <script type="text/javascript" src="js/verify.js"></script>
而JSP頁面只需要一個文本框、一個普通按鈕和一個空白DIV層即可,該DIV用于顯示服務(wù)器端返回的處理結(jié)果;按鈕的單擊事件觸發(fā)verify()方法。如下:
<body> <center> 用戶名:<input type="text" id="uname" name="uname" /> <br /> <input type="button" name="btnVerify" value="驗證" onclick="verify()" /> <br /> <div id="result"> </div> </center> </body>
注意:Ajax方式下不需要使用表單來進行數(shù)據(jù)提交,因此頁面中不用寫<form>標(biāo)簽。
接下來,創(chuàng)建一個verify.js文件,在該文件中創(chuàng)建verify()方法,用來實現(xiàn)Ajax的無刷新效果,這是該示例中最為重要的一步。想要使用jQuery實現(xiàn)Ajax分為以下四步:
- · 獲取文本框中的內(nèi)容;
- · 將文本框中的內(nèi)容發(fā)送給服務(wù)器端的Servlet;
- · 接收服務(wù)器端返回的數(shù)據(jù);
- · 將服務(wù)器端返回的數(shù)據(jù)動態(tài)地顯示在JSP頁面上。
針對于第一步,首先通過jQuery獲得對象,并取得對象的值,如下:
// 取得文本框?qū)ο?通過$()獲取的所有對象都是jQuery對象 var jQueryObject = $("#uname"); // 獲取文本框中的值 var userName = jQueryObject.val();
通過jQuery中的$()函數(shù)獲得頁面的節(jié)點,該函數(shù)得到的是一個jQuery對象,然后通過jQuery中的val()方法取得節(jié)點的值,也就是文本框中的內(nèi)容。
針對于第二步,我們使用jQuery的get()方法來發(fā)送數(shù)據(jù)到服務(wù)器端,如下:
$.get("TestServlet?uname=" + userName,null,callback);
該方法返回一個XMLHttpRequest對象,該方法提供三個參數(shù),第一個是請求的服務(wù)器端的URL,第二個參數(shù)是待發(fā)送的參數(shù),一般可以在第一個URL中直接帶上參數(shù),所以一般該參數(shù)為null,第三個參數(shù)是服務(wù)器端成功處理完成數(shù)據(jù)之后的一個回調(diào)函數(shù)。
針對于第三步,就應(yīng)該創(chuàng)建一個回調(diào)函數(shù),用來處理服務(wù)器端返回的數(shù)據(jù),如下:
// 回調(diào)函數(shù) function callback(data) { } 該回調(diào)函數(shù)有一個參數(shù),該參數(shù)就是客戶端返回的數(shù)據(jù)。 針對于第四步,再次利用jQueyr的選擇器函數(shù)得到DIV層,將返回的數(shù)據(jù)顯示在該層之上,如下: function callback(data) { /** * 第三步,接收服務(wù)器端返回的數(shù)據(jù) */ // 將服務(wù)器端返回的數(shù)據(jù)動態(tài)的顯示在頁面上 var resultObject = $("#result"); resultObject.html(data); }
利用jQuery的html()方法將數(shù)據(jù)動態(tài)地顯示到DIV層之中。
現(xiàn)在我們對以上的代碼進行優(yōu)化,我們用兩句代碼就可以實現(xiàn)以上所有代碼的功能,這就是jQuery的強大之處之一。在verify.js文件之中的verify()方法也可以寫成下面的形式:
$.get("TestServlet?uname=" +$("#uname").val(),null,function(data){ $("#result").html(data); })
再為大家分享一個,下面是“無刷新登錄”的例子,采用Ashx+jQuery Ajax實現(xiàn)。
1、后臺實例代碼 ashx文件(可替換為從數(shù)據(jù)庫中讀?。?nbsp;
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; //context.Response.Write("Hello World"); string name = context.Request.Params["name"].ToString().Trim(); if ("china".Equals(name)) { context.Response.Write("1");//1標(biāo)志login success } else { context.Response.Write("0");//0標(biāo)志login fail } }
2、前臺實例代碼 aspx文件
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script src="js/jquery-1.4.2.js" type="text/javascript"></script> <script type="text/javascript"> $(function() { $("#test").live("click", function() { //alert(0); $.ajax({ type: 'POST', url: 'Handler1.ashx', data: { "name": $("#name").val() }, success: function(data) { if (1 == data) alert('login success'); else alert('login fail'); } }); }); }); </script> </head> <body> <form id="form1" runat="server"> <div> <input type="text" name="name" id="name" /> <input type="button" name="test" id="test" value="validate" /> </div> </form> </body> </html>
分別在前臺aspx頁面和后臺ashx頁面中輸入如上代碼,就實現(xiàn)了一個超級簡單的Ajax登錄,很簡單吧?
- jQuery+Ajax+js實現(xiàn)請求json格式數(shù)據(jù)并渲染到html頁面操作示例
- 為jquery的ajax請求添加超時timeout時間的操作方法
- JQuery中Ajax的操作完整例子
- jquery插件ajaxupload實現(xiàn)文件上傳操作
- Jquery操作Ajax方法小結(jié)
- Jquery ajax加載等待執(zhí)行結(jié)束再繼續(xù)執(zhí)行下面代碼操作
- Jquery Ajax請求文件下載操作失敗的原因分析及解決辦法
- jQuery學(xué)習(xí)筆記之 Ajax操作篇(二) - 數(shù)據(jù)傳遞
- 通過實例解析jQ Ajax操作相關(guān)原理
相關(guān)文章
Web 前端設(shè)計模式--Dom重構(gòu) 提高顯示性能
首頁那邊有一個產(chǎn)品瀏覽的版塊在延遲載入的時候,將我所有的隱藏幀的項都顯示出來,因為慢導(dǎo)致頁面變形。2010-10-10淺談$(''div a'') 與$(''div>a'')的區(qū)別
下面小編就為大家?guī)硪黄獪\談$('div a') 與$('div>a')的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-07-07自定義一個jquery插件[鼠標(biāo)懸浮時候 出現(xiàn)說明label]
自定義一個jquery插件,一個簡單的jquery.js,入門的jquery插件,jquery入門實例,jquery helloworld。2011-06-06完美解決jQuery符號$與其他javascript 庫、框架沖突的問題
下面小編就為大家?guī)硪黄昝澜鉀QjQuery符號$與其他javascript 庫、框架沖突的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08