【原創】Js調用后台方法


對於開發前端的人員來說,為了一些特效,不讓頁面回發,可以需要異步去調用我們后台的方法,由於這個問題比較老了,牛人可以到別處看看了,哈哈。

目前的技術也是比較多,實現方式也各個相同,只要按照每個技術規則就很好的實現了。廢話不說,本節內容如下:

(1)利用一般處理文件來實現調用后台方法

(2)利用Jquery調用后台方法

(3)利用微軟自帶的PageMethods

(4)利用AjaxPro實現調用后台方法

開始了。。。。,本節只講怎么實現,至於理念和深入的資料不會在本節中細講

一:利用一般處理文件來實現調用后台方法

這個其實要利用Jquery來實現,建立一個項目,在此項目上建立一個ashxToBack.aspx窗口用於做測試,前台代碼如下:

 1 <html xmlns="http://www.w3.org/1999/xhtml" >
 2 <head runat="server">
 3     <title>無標題頁</title>
 4     <script src="jquery-1.4.2.min.js" type="text/javascript"></script>
 5     
 6     <script type="text/javascript">
 7         $(document).ready(function() {
 8             $("#btn_Sumbit").click(function() {
 9 
10                 $.ajax({
11                     type: "POST",
12                     url: "ashxToBack.ashx",
13                     dataType: "html",
14                     data: "name=" + "ZhangSan",
15                     beforeSend: function(XMLHttpRequest) {
16                         //$("#showResult").text("正在查詢");           
17                     },
18                     success: function(msg) {
19                         alert("您好," + msg);
20                     },
21                     complete: function(XMLHttpRequest, textStatus) {
22 
23                     },
24                     error: function() {
25                         //錯誤處理
26                     }
27                 });
28             });
29         });
30 
31     </script>
32 </head>
33 <body>
34     <form id="form1" runat="server">
35     <div>
36            <input id="btn_Sumbit" type="button" onclick="form_Submit()" value="測 試"/>
37     </div>
38     </form>
39 </body>
40 </html>

再建立一個一般處理文件ashxToBack.ashx,代碼如下:

 1  public void ProcessRequest(HttpContext context)
 2         {
 3             context.Response.ContentType = "text/plain";
 4 
 5             if (!string.IsNullOrEmpty(context.Request.Form["name"]))
 6             {
 7                 context.Response.Write(context.Request.Form["name"]);
 8                 context.Response.End();
 9             }
10         }

測試一下,是不是很簡單,其實這個可以傳自定類,並且以JSON方式傳遞,方便快捷,並且微軟在3.5框架后對JSON已經有專門的類進行處理了,有興趣的人可以去搜索相關資料,很多的,不多說,繼續。

二:利用Jquery調用后台方法

建立一個頁面JqueryToBack_Simply.aspx,代碼如下:

 1 <html xmlns="http://www.w3.org/1999/xhtml" >
 2 <head runat="server">
 3     <title>利用Jquery調用后台方法</title>
 4      <script src="jquery-1.4.2.min-vsdoc.js" type="text/javascript"></script>
 5      <script type="text/javascript">
 6          //返回復合類型 
 7          $(document).ready(function() {
 8              $('#btn_Submit').click(function() {
 9                  $.ajax({
10                      type: "POST",
11                      contentType: "application/json",
12                      url: "JqueryToBack_Simply.aspx/GetClass",
13                      data: "{}",
14                      dataType: 'json',
15                      success: function(result) {
16                          $(result.d).each(function() {
17                               alert("用戶ID:" + this['UserID'] + " ,用戶名:" + this['UserName']);
18                              
19                          });
20 
21 
22                      }
23                  });
24              });
25          });
26      </script>
27 </head>
28 <body>
29     <form id="form1" runat="server">
30     <div>
31         <input type="button" id="btn_Submit" value=" 返回復合類型"/>  
32     </div>
33     </form>
34 </body>
35 </html>

后台代碼如下:

 1  protected void Page_Load(object sender, EventArgs e)
 2         {
 3 
 4         }
 5 
 6         /// <summary>
 7         /// 返回一個復合類型
 8         /// </summary>
 9         /// <returns></returns>
10         [WebMethod]
11         public static UserInfo GetClass()
12         {
13             return new UserInfo { UserID = "100000", UserName = "楊新華" };
14         }
15         public class UserInfo
16         {
17             public string UserID { get; set; }
18             public string UserName { get; set; }
19         }

 

三:利用微軟自帶的PageMethods

這個得依賴於ScriptManager組件,代碼如下:

 1 <html xmlns="http://www.w3.org/1999/xhtml" >
 2 <head runat="server">
 3     <title>PageMethods調用后台代碼</title>
 4 
 5     <script src="jquery-1.4.2.min.js" type="text/javascript"></script>
 6     
 7     <script type="text/javascript">
 8         function form_Submit() {
 9            
10             PageMethods.doSubmit("測試", function(jsonObj) {
11                 alert(jsonObj);
12             });
13            
14         }
15     </script>
16 </head>
17 <body>
18     <form id="form1" runat="server">
19         <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
20         </asp:ScriptManager>
21 
22     
23     <div>
24         <input type="button" id="btn_Submit" value="提 交" onclick="form_Submit()" />
25     </div>
26     </form>
27 </body>
28 </html>

 

后台代碼如下:

 1  protected void Page_Load(object sender, EventArgs e)
 2         {
 3 
 4         }
 5 
 6             /// <summary>
 7     /// 登入
 8     /// </summary>
 9     /// <param name="account"></param>
10     /// <param name="password"></param>
11     /// <param name="isRememberMe"></param>
12     /// <returns></returns>
13         [WebMethod]
14         public static string doSubmit(string msg)
15         {
16             return msg;
17         }

注意幾項:

第一:ScriptManager 必須設置成  EnablePageMethods="true"

第二:后台方法必須是靜態的。

第三:后台方法上面必須添加特性標記 [System.Web.Services.WebMethod]

四:利用AjaxPro實現調用后台方法

這個需要下載AjaxPro.dll或是AjaxPro.2.dll,我這里用的是AjaxPro.2.dll

首先在你項目中引用這個AjaxPro.2.dll,接下來在Web.Config中配置它

  <httpHandlers>

      <add verb="*" path="*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2 "/>
    </httpHandlers>

這樣就可以使用了,

新建頁面AjaxPro_Test.aspx,前台代碼如下:

 1 <html xmlns="http://www.w3.org/1999/xhtml" >
 2 <head runat="server">
 3     <title>AjaxPro來實現調用后台</title>
 4 
 5     <script src="jquery-1.4.2.min.js" type="text/javascript"></script>
 6     <script type="text/javascript">
 7         function form_Submit() {
 8             JqueryBackMethod.AjaxPro_Test.GetMessage("AjaxPro", function(obj) {
 9               alert(obj.value);
10             });
11         }       
12     </script>
13 </head>
14 <body>
15     <form id="form1" runat="server">
16     <div>
17         <input id="btn_Sumbit" type="button" onclick="form_Submit()" value="測 試"/>
18     </div>
19     </form>
20 </body>
21 </html>

后台代碼如下:

 protected void Page_Load(object sender, EventArgs e)
        {
            Utility.RegisterTypeForAjax(typeof(JqueryBackMethod.AjaxPro_Test));
        }

        [AjaxMethod]
        public string GetMessage(string testText)
        {
            return "Hello " + testText;
        }

注意事項:

第一:Utility.RegisterTypeForAjax(typeof(JqueryBackMethod.AjaxPro_Test)); 是相當於注冊哪個類可以被前台js調用,如果這個類有命名空間,則在注冊時必須加上命名空間

前台調用也是如此

第二:在后台方法上必須添加特性:  [AjaxMethod]

第三:當你在項目中使用第二種方法時,再用本方法就不行了,原因是這個方法在Web.config中注冊時已經加了一些額外的處理器,導致不能運行。這個額外處理器可以在運行這個頁面時查看源代碼即可。源代碼如下:

1 <script type="text/javascript" src="/ajaxpro/prototype.ashx"></script>
2 <script type="text/javascript" src="/ajaxpro/core.ashx"></script>
3 <script type="text/javascript" src="/ajaxpro/converter.ashx"></script>
4 <script type="text/javascript" src="/ajaxpro/JqueryBackMethod.AjaxPro_Test,JqueryBackMethod.ashx"></script>

  

 好了,本節就說到這,只是給大家開個山,更多技術知識請在網絡上查詢相關資料了解。

 歡迎轉載,轉載請標注原創地址:http://www.cnblogs.com/yxhblog/archive/2012/07/26/2610264.html

 


免責聲明!

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



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