zoukankan      html  css  js  c++  java
  • 使用ASP.NET AJAX 从脚本中调用Web 服务的应用方法

    技能点:通过编写WebService,在页面js中调用WebService来进行数据查询。

    网站开发,有些时候需要使用js在页面动态生成一些内容,但还有些数据要通过查询数据库才能获取的。

    但由于诸如主键id等一些关键数据在后台不易获取,或在后台获取数据后不易直接在前台通过js使用。

    这种情况下,使用js+ajax的方式来实现,效果也是不错的。

    1.编写webservice:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 using System.Web.Services;
     6 using BLL;
     7 using Model;
     8 ///
     9 ///GetProPointService 的摘要说明
    10 ///
    11 [WebService(Namespace = "http://tempuri.org/")]
    12 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    13 //若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    14 [System.Web.Script.Services.ScriptService]
    15 public class GetProPointService : System.Web.Services.WebService {
    16     public GetProPointService () {
    17         //如果使用设计的组件,请取消注释以下行
    18         //InitializeComponent();
    19     }
    20     [WebMethod]
    21     public int GetPointByProNo(int proNo)
    22     {
    23         ProSelectBLL bll = new ProSelectBLL();
    24         return bll.GetPointByProNo(proNo);
    25     }
    26 }

    2. 在前台页面代码中注册web服务:

    1         <asp:ScriptManager ID="ScriptManager" runat="server">
    2             <Services>
    3                 <asp:ServiceReference Path="~/WebService/GetProPointService.asmx" />
    4             </Services>
    5         </asp:ScriptManager

    3. 在前台页面脚本中调用web服务:

         //事件处理函数
         function btnInvoke_onclick() {
             var theName = $get("tbName").value;
             SimpleWebService.SayHello(theName, processRollBack);
         }
         //回调函数
         function processRollBack(result) {
             $get("result").innerHTML = result;
         }

    扩展:如果是循环调用webservice与数据库交互,即在事件处理函数中循环调用web服务,那么获取的数据将在事件处理函数的循环结束后逐一进行,诸如下例:

    //事件处理函数
    function btnInvoke_onclick() {
     for (var i = 0; i < 3; i++) {
         //循环
         Service.ServiceMethod(processRollBack);
         alert("test");
    }
    //回调函数
    function processRollBack(result) {
         alert(result);
    }

         按理,应该是"test",和result的值以a,b,a,b,a,b的方式轮流弹出的,但是这里的结果却是,先弹出3次test,然后是3次result的值。

        也就相当于事件处理函数每次循环都调用webservice,或者将参数传递个webservice,但是webservice并没有随着事件处理函数进行循环操作,而是在事件处理函数结束后统一进行应有的操作。

         由于目前对web服务了解还不深,对这种现象还无法解释,但是把本来看似应该是跟着事件处理函数一块儿循环的操作放在回调函数中进行循环的方法,实现了我想要的功能。

  • 相关阅读:
    搭建一个免费的,无限流量的Bloggithub Pages和Jekyll入门
    通过扩展方法 链式方法 为MVC 3 视图添加验证
    让移动UI模式设计者获得灵感的10个有用的网站资源
    企业级应用架构(NHibernater+Spring.Net+MVC3)_V1.0
    把博客放在Github
    实例化需求—流程
    nginx+keepalievd,实现负载均衡和故障点切换。keepalived双机热备。
    古城钟楼
    从初步使用该控件到多维数据集控件PivotGridControl
    搜索引擎的评价
  • 原文地址:https://www.cnblogs.com/xyyt/p/3978685.html
Copyright © 2011-2022 走看看