ajax非同步呼叫資料執行個體

來源:互聯網
上載者:User

ajax非同步呼叫資料執行個體


通過ajax在用戶端調用後台代碼,通過後台代碼更改,修複,查詢資料,並把結果返回給用戶端,在用戶端擷取到伺服器返回的資料在做相應的操作,從而實現通過HTML控制項操作一些在網頁特效比較難實現的功能;比如通過HTML的控制項訪問查詢資料庫教程,並把結果傳給用戶端顯示,這方面在google地圖開發應用得比較多,下面以一個簡單的執行個體說明:

添加一個.asp教程x的頁面,命名為:ajaxPKashx.aspx,全部代碼如下:

 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ajaxPKashx.aspx.cs" Inherits="AjaxTest.ajaxPKashx" %>
 2
 3  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4
 5  <html xmlns="http://www.w3.org/1999/xhtml" >
 6  <head runat="server">
 7     <title>通過ajax實現用戶端擷取後台資料</title>
 8  </head>
 9  <body>
10  <script language="javascript" type="text/javascript">
11     //對於沒有XMLHttpRequest對象的瀏覽器,需要構造一個
12     //該方法可寫在公用js檔案中,定義全域變數儲存
13     if (!window.XMLHttpRequest) {
14         window.XMLHttpRequest = function () {
15             return new ActiveXObject("Microsoft.XMLHTTP");
16         }
17     }
18     //HTML按鈕控制項的觸發事件
19     function showUserInfo()
20     {
21         //擷取傳遞參數
22         var userID = document.getElementById("tbID").value;
23         //接收返回的結果
24         var jsUserInfo = "";
25         //分解返回的結果字串,數組形式出現
26         var objArray = new Array();
27         //定義一個XMLHttpRequest,用於請求sample.ashx檔案
28         var aRequest = new XMLHttpRequest();
29         //非同步呼叫sample.ashx檔案並傳參數
30        
31         //第一個參數傳輸方式
32         //第二個參數是目標的地址
33         //第三個參數是表示是否為非同步呼叫,false非非同步,即同步;為true則為非同步呼叫
34         aRequest.open("POST","sample.ashx?userid=" + userID,true);
35        
36         ////請求完成將收到此事件
37         aRequest.onreadystatechange = function()
38         {
39             //狀態4表示請求成功
40             if(aRequest.readyState == 4)
41             {
42                 //擷取返回結果
43                 jsUserInfo = aRequest.responseText;
44                 //對返回結果處理
45                 if(jsUserInfo.length > 0)
46                 {
47                     objArray = jsUserInfo.split(",");
48                 }
49                 document.getElementById("spNo").value = objArray[0].toString();
50                 document.getElementById("spName").value = objArray[1].toString();
51                 document.getElementById("spTime").value = objArray[2].toString();
52             }
53         }
54         aRequest.send(null);
55     }
56 </script>
57     <form id="form1" runat="server">
58     <div>
59         <asp:TextBox ID="tbID" runat="server"></asp:TextBox>
60         <input id="btShow" type="button" value="button" onclick="showUserInfo();" />
61     </div>
62     <div>
63         <asp:Label ID="Label1" runat="server" Text="工號:"></asp:Label>
64         <input id="spNo" type="text" />
65     </div>
66     <div>
67         <asp:Label ID="Label2" runat="server" Text="姓名:"></asp:Label>
68         <input id="spName" type="text" />
69     </div>
70     <div>
71         <asp:Label ID="Label3" runat="server" Text="入職時間:"></asp:Label>
72         <input id="spTime" type="text" />
73     </div>
74     </form>
75 </body>
76 </html>

 

 


第34行中

aRequest.open("POST","sample.ashx?userid=" + userID,true);

 

 


sample.ashx 為“一般處理常式”檔案,也是後台代碼編寫的地方,根據我的瞭解,這種檔案系統會產生兩個方法,不允許在添加任何方法,或是添加了也無效,有待驗證,有比較清楚的大蝦請指教,以下為該檔案的全部代碼:

這個方法是在建立檔案時自動建立的,當我們在用戶端通過

 1 using System;
 2 using System.Data;
 3 using System.Web;
 4 using System.Collections;
 5 using System.Web.Services;
 6 using System.Web.Services.Protocols;
 7
 8 namespace AjaxTest
 9 {
10     /// <summary>
11     /// $codebehindclassname$ 的摘要說明
12     /// </summary>
13     [WebService(Namespace = "http://tempuri.org/")]
14     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
15     public class sample : IHttpHandler
16     {
17
18         public void ProcessRequest(HttpContext context)
19         {
20             context.Response.ContentType = "text/plain";
21             //使用者ID,接收用戶端傳過來的參數
22             string userID = "";
23             //傳回的字串
24             string userInfo = "";
25             //讀取用戶端傳過來的參數
26             if(!string.IsNullOrEmpty(HttpContext.Current.Request["userid"]))
27                 userID = HttpContext.Current.Request["userid"];
28
29             //通過用戶端傳來的參數擷取後台資料,包括對資料庫的操作後返回的資料集,在此就不累贅了
30             //擷取後的資料可以以JSON或XML的格式封裝後以string的形式傳送到用戶端
31             //如果資料簡單就返回一個字串,如下:
32             userInfo = "8080,張三,2008-07-01";
33             context.Response.Write(userInfo);
34         }
35
36         public bool IsReusable
37         {
38             get
39             {
40                 return false;
41             }
42         }
43     }
44 }


我們的代碼只需要寫在這個方法中

public void ProcessRequest(HttpContext context)

aRequest.open("POST","sample.ashx?userid=" + userID,true);


這個方法調用這個“一般處理常式”時,系統預設調用了該方法,所以我們的處理代碼和傳回值都在該方法完成,這樣有一個不好的地方,就是每調用一次都必須新建立一個“一般處理常式”,可以想象在項目中如果經常用到這種方法那這種檔案要建立很多個,這對應項目的管理是比較鬱悶的;這個問題其實也是有解決的方法,ajax調用webservice便可以解決,通過調用制定的方法和制定的傳回值來實現

返回方法:

context.Response.Write(userInfo);


通過該方法可以把string類型的userInfo變數傳回用戶端,用戶端接收到該string類型的變數即可對其操作,用戶端的接收代碼如下:

jsUserInfo = aRequest.responseText;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.