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

  • 相关阅读:
    优化SQL查询:如何写出高性能SQL语句
    动态库与静态库
    多线程程序中fork导致的一些问题
    合理的使用size_t可以提高程序的可移植性和代码的可读性,让你的程序更高效。
    linux下C++ STL hash_map的使用以及使用char *型变量作为Key值的一大“坑”
    阅读腾讯编程规范的笔记
    2、vector的实现
    linux下C++对线程的封装
    1、空间配置器
    SQL Server三种表连接原理
  • 原文地址:https://www.cnblogs.com/xyyt/p/3978685.html
Copyright © 2011-2022 走看看