zoukankan      html  css  js  c++  java
  • jquery和asp.net ajax两种方式调用webservice中的公用方法和.cs中的静态方法

    因为jquery丰富的插件,以及对ajax的支持,所以用它和服务器端进行数据交互肯定是少不了的。

    asp.net ajax就是回味了,不过关于ajax调用服务器端的方法看是看了不少,今天动手去做个demo的时候

    还出了点小问题,先记下了,最近肯定会用的。

    先来看看jquery方式:

    要调用webservice,肯定是建一个webservice了,文件名称就叫AjaxService.asmx,内容归就很简单了,

    提供一个方法,返回一个简单的string数据类型,还是注意在类名前加上

    [System.Web.Script.Services.ScriptService],在方法前加上[WebService]的标记,为什么我也不知道

    ,就是因为不加的话就调用不了,所以加上了。这里就只有一个方法:

    [WebMethod]
    public string sayHello(string s)
    {
        
    return "Hello " + s;
    }

    新建一个测试页面default.aspx,在代码里也添加一个方法,也是返回简单的数据类型,该方法想要被js

    调用的话还必须是静态的,有点欺人!这都算了,还要加上  [System.Web.Services.WebMethod]才愿意

    ,方法如下:

    [System.Web.Services.WebMethod]
            
    public static string AjaxServiceTest(string str)
            
    {
                
    return string.Format("Hello,{0}", str);
            }

    前台代码很简单,就提供一个让输入的文本框,两个按钮:
    <form id="form1" runat="server">

            <div>
            <h1>返回简单的数据类型</h1>
            <hr />
                <input id="inputName" type="text" size="20" runat="server" />
                <input id="btnService" type="button" value="调用WebServer方式"/>
                <input id="btnAspx" type="button" value="调用页面方式"/>
            <hr />
          
            </div>
        </form>
    可以看到按钮上并没有onclick来绑定方法,这一点就是jquery牛比了,它来绑定就行了:

     1<script type="text/javascript" src="jquery-1.2.6.js"></script>
     2    <script language="javascript" type="text/javascript">
     3    $(function(){
     4        //调用webservice返回简单类型
     5         $("#btnService").click(function(){
     6            $.ajax({
     7               type: "POST",
     8               contentType:"application/json;utf-8",
     9               url: "AjaxService.asmx/AjaxServiceTest",
    10               data:"{s:\""+$("#inputName").val()+"\"}",//传webservice方法的参数,s是方法的
    11
    12参数,必须一致
    13                                          
    14               success: function(data){
    15                   //将返回字符串转换为json对象
    16                   //如果
    17                   var json = null;
    18                   try{
    19                        json=eval('(' + data + ')');
    20                   }
    catch(e){
    21                    alert("返回字符串不是json格式!");
    22                    return;
    23                   }

    24                   alert(json.d);
    25               }

    26            }
    );
    27        }
    )
    28        //调用页面静态方法返回简单类型
    29         $("#btnAspx").click(function(){
    30            $.ajax({
    31               type: "POST",
    32               contentType:"application/json;utf-8",
    33               url: "Default.aspx/AjaxServiceTest",
    34               data:"{str:\""+$("#inputName").val()+"\"}",//传到.cs静态方法的参数,str是方法
    35
    36的参数,必须一致
    37                                     
    38               success: function(data){
    39                   //将返回字符串转换为json对象
    40                   //如果
    41                   var json = null;
    42                   try{
    43                        json=eval('(' + data + ')');
    44                   }
    catch(e){
    45                    alert("返回字符串不是json格式!");
    46                    return;
    47                   }

    48                   alert(json.d);
    49               }

    50            }
    );
    51        }
    )
    52               
    53        }
    )
    54
    55    </script>

    运行效果就不说,输入“medal”,就弹出“hello,medal”。

    asp.net ajax调用webservice方法返回复杂类型

    既然是复杂类型,就新建一个类型了,就叫Users类吧,就四个属性:

     1public class Users
     2    {
     3        //属性Id
     4        public int Id
     5        {
     6            get;
     7            set;
     8        }

     9        //用户名
    10        public string Name
    11        {
    12            get;
    13            set;
    14        }

    15        //登陆密码
    16        public string PassWord
    17        {
    18            get;
    19            set;
    20        }

    21        //Email
    22        public string Email
    23        {
    24            get;
    25            set;
    26        }

    在webservice中来两个方法,一个是返回单个Users对象,一个返回多个Users对象:

    [WebMethod]
            
    public Users GetUser()
            
    {
                Users objUser 
    = new Users { Id = 1, Name = "medal", PassWord = "123456", Email = 

    "medal@126.com" }
    ;
                
    return objUser;
            }

            
    //返回五个对象
            [WebMethod]
            
    public Users[] GetMoreUser()
            
    {
                List
    <Users> objUsers = new List<Users>();
                
    for (int i = 0; i < 5; i++)
                
    {
                    Users user 
    = new Users { Id = i, Name = string.Format("medal{0}", i), Email 

    = string.Format("medal{0}@126.com", i), PassWord = string.Format("password{0}", i) }
    ;
                    objUsers.Add(user);
                }

                
    return objUsers.ToArray();
            }

    在类前面还的多两个标记,
     [System.Web.Script.Services.ScriptService]
     [GenerateScriptType(typeof(Users))]
    第一个标记就不说了,要被调用必须加的,第二个就是返回类型是自定义的。
    新建一个default.aspx页面来调用看看,html代码中,一个users对象以input把其属性显示出来,多个

    users对象以table方式呈现,当然<scriptManager>控件和webservice的引用是必不可少的:
    form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        <Services>
        <asp:ServiceReference Path="UsersServices.asmx" />
        </Services>
        </asp:ScriptManager>
       
        <div>
        <h1>UserInfo:</h1>
        <hr />
        Id:<input id="UserId" type="text" /><br />
        UserName:<input id="UserName" type="text" /><br />
        PassWord:<input id="PassWord" type="text" /><br />
        Email:<input id="Email" type="text" />
        <hr />
        <input id="btnGet" type="button" value="GetUser" onclick="GetUser();" /><input

    id="btnGetAll" value="GetAllUser" type="button" onclick="GetAllUsers()"; /><br />
        <div id="table"></div>
        </div>
       
        </form>
    主角登场,js代码来了,都有注释的,不啰嗦了:

    <script type="text/javascript">
        
    //调用webservice中返回一个users的方法
        function GetUser()
        
    {
            
    //一定要加上命名空间
             JqueryWebServices.UsersServices.GetUser

    (FillUserList,ErrorHandler,TimeOutHandler);
    //
         }

         
    //调用webservice的返回五个users对象的方法
         function GetAllUsers()
         
    {
           
    //一定要加上命名空间
            JqueryWebServices.UsersServices.GetMoreUser

    (FillAllUserList,ErrorHandler,TimeOutHandler);
         }

         
    //五个users对象在table里呈现出来
         function FillAllUserList(result)
         
    {
             
    var str="<table 

    border=1><tr><td>Id</td><td>Name</td><td>PassWord</td><td>Email</td></tr>
    ";
             
    for(var i=0;i<result.length;i++)
             
    {
                str
    =str+"<tr><td>"+result[i].Id+"</td><td>"+result[i].Name+"</td><td>"+result

    [i].PassWord
    +"</td><td>"+result[i].Email+"</td>";  
             }

             str
    =str+"</tr></table>";
             
    var table=document.getElementById("table");
             table.innerHTML
    =str;
         }

         
    //单个user在input里显示   
        function FillUserList(result)
        
    {
            
    var userid=document.getElementById("UserId");
            userid.value
    =result.Id;
            
    var userName=document.getElementById("UserName");
            userName.value
    =result.Name;
            
    var PassWord=document.getElementById("PassWord");
            PassWord.value
    =result.PassWord;
            
    var Email=document.getElementById("Email");
            Email.value
    =result.Email;
        }

        
    //用户上下文
        function TimeOutHandler(result)
        
    {
            alert(
    "Timeout :" + result);
        }

        
    //异常情况
        function ErrorHandler(result)
        
    {
            
    var msg=result.get_exceptionType() + "\r\n";
            msg 
    += result.get_message() + "\r\n";
            msg 
    += result.get_stackTrace();
            alert(msg);
        }

        
    </script>

    效果是页面刚加载什么都没有,单击按钮之后数据加载出来。

     

  • 相关阅读:
    Python之eval的使用
    Python文件操作
    Python异常处理
    Python设计模式之单例模式
    Python面向对象
    Minimum Window Substring
    Minimum Size Subarray Sum
    Find Minimum in Rotated Sorted Array II
    Closest Binary Search Tree Value II
    Closest Binary Search Tree Value
  • 原文地址:https://www.cnblogs.com/medal/p/1250779.html
Copyright © 2011-2022 走看看