zoukankan      html  css  js  c++  java
  • WebService实现Ajax

        国庆假期闲来无聊,也跟风研究了一下Ajax,翻了翻《Ajax 基础教程》,对Ajax做了一个系统的了解。书中涉及服务器端技术都是用Servelet来实现,看着不爽,虽然说在.NET与PHP也可以实现,但并没有例子。我想在.NET中使用,又不想去重写HttpHandler,也不想用Ajax.net,能不能直接通过javascript访问WebService来实现呢。理论是可行的,但比较烦的就是在客户端需要记住webservice的方法与参数的名称。
        下面是利用Webservice和Ajax实现《Ajax 基础教程》书中进度条一例的代码:
    1、WebService,根据客户端的访问返回进度:
      1using System;
      2using System.Collections;
      3using System.ComponentModel;
      4using System.Data;
      5using System.Diagnostics;
      6using System.Web;
      7using System.Web.Services;
      8
      9namespace AjaxSample
     10{
     11    /// <summary>
     12    /// ProgressBarService 的摘要说明。
     13    /// </summary>

     14    [WebService(Namespace="http://jeetqiu.com/ProgressBar/")]
     15    public class ProgressBarService : System.Web.Services.WebService
     16    {
     17        public ProgressBarService()
     18        {
     19            //CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的
     20            InitializeComponent();
     21        }

     22
     23        组件设计器生成的代码
     49
     50        // WEB 服务示例
     51        // HelloWorld() 示例服务返回字符串 Hello World
     52        // 若要生成,请取消注释下列行,然后保存并生成项目
     53        // 若要测试此 Web 服务,请按 F5 键
     54
     55//        [WebMethod]
     56//        public string HelloWorld()
     57//        {
     58//            return "Hello World";
     59//        }
     60        [WebMethod]
     61        public string GetProgress(string task, int key)
     62        {
     63            string percent = "";
     64            if(task == "create")
     65            {
     66                percent = "1";
     67            }

     68            else
     69            {
     70                switch(key)
     71                {
     72                    case 1:
     73                        percent = "10";
     74                        break;
     75                    case 2:
     76                        percent = "23";
     77                        break;
     78                    case 3:
     79                        percent = "35";
     80                        break;
     81                    case 4:
     82                        percent = "51";
     83                        break;
     84                    case 5:
     85                        percent = "64";
     86                        break;
     87                    case 6:
     88                        percent = "73";
     89                        break;
     90                    case 7:
     91                        percent = "89";
     92                        break;
     93                    case 8:
     94                        percent = "100";
     95                        break;
     96                }

     97            }

     98            return percent;
     99        }

    100    }

    101}

    102
    2、客户端HTML页,访问WebService并更新进度条信息:
      1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
      2<html>
      3    <head>
      4        <title>Ajax Progress Bar</title>
      5        <script type="text/javascript">
      6        var xmlHttp;
      7        var key = 1;
      8        var bar_color = 'gray';
      9        var span_id = "block";
     10        var clear = "&nbsp;&nbsp;&nbsp;"
     11        
     12      var SERVICE_URL = "http://localhost/AjaxSample/ProgressBarService.asmx";
     13      var SOAP_ACTION_BASE = "http://jeetqiu.com/ProgressBar/";
     14
     15        function createXMLHttpRequest() {
     16            if (window.ActiveXObject) {
     17                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
     18            }
     
     19            else if (window.XMLHttpRequest) {
     20                xmlHttp = new XMLHttpRequest();                
     21            }

     22        }

     23
     24        function go() {
     25            createXMLHttpRequest();
     26            checkDiv();
     27            /**
     28            var url = "progressbar.aspx?task=create";
     29            var button = document.getElementById("go");
     30            button.disabled = true;
     31            xmlHttp.open("GET", url, true);
     32            xmlHttp.onreadystatechange = goCallback;
     33            xmlHttp.send(null);*/

     34            
     35            var sRequest = getRequest("create",0);
     36            var soapActionHeader = SOAP_ACTION_BASE + "GetProgress"
     37            var button = document.getElementById("go");
     38            button.disable = true;
     39            xmlHttp.open("POST", SERVICE_URL, true);
     40            xmlHttp.onreadystatechange = goCallback;
     41            xmlHttp.setRequestHeader("Content-Type""text/xml");
     42            xmlHttp.setRequestHeader("SOAPAction", soapActionHeader);
     43            xmlHttp.send(sRequest);
     44        }

     45
     46        function goCallback() {
     47            if (xmlHttp.readyState == 4{
     48                if (xmlHttp.status == 200{
     49                    setTimeout("pollServer()"2000);
     50                }

     51            }

     52        }

     53        
     54    function getRequest(sTask, iKey)
     55    {
     56            var sRequest = "<soap:Envelope xmlns:xsi=\""
     57                 + "http://www.w3.org/2001/XMLSchema-instance\" "
     58                 + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
     59                 + "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
     60                 + "<soap:Body>\n"
     61                 + "<" + "GetProgress" + " xmlns=\"" + SOAP_ACTION_BASE + "\">\n"
     62                 + "<task>" + sTask + "</task>\n"
     63                 + "<key>" + iKey + "</key>\n"
     64                 + "</" + "GetProgress" + ">\n"
     65                 + "</soap:Body>\n"
     66                 + "</soap:Envelope>\n";
     67            return sRequest;
     68    }

     69        function pollServer() {
     70            createXMLHttpRequest();
     71            var sRequest = getRequest("poll",key);
     72                        var soapActionHeader = SOAP_ACTION_BASE + "GetProgress"
     73
     74           xmlHttp.open("POST", SERVICE_URL, true);
     75            xmlHttp.onreadystatechange = pollCallback;
     76            xmlHttp.setRequestHeader("Content-Type""text/xml");
     77            xmlHttp.setRequestHeader("SOAPAction", soapActionHeader);
     78            xmlHttp.send(sRequest);
     79            key ++;
     80        }

     81        
     82        function pollCallback() {
     83            if (xmlHttp.readyState == 4{
     84                if (xmlHttp.status == 200{
     85                    var percent_complete = xmlHttp.responseXML.getElementsByTagName("GetProgressResult")[0].firstChild.data;
     86                    
     87                    var index = processResult(percent_complete);
     88                    for (var i = 1; i <= index; i++{
     89                        var elem = document.getElementById("block" + i);
     90                        elem.innerHTML = clear;
     91
     92                        elem.style.backgroundColor = bar_color;
     93                        var next_cell = i + 1;
     94                        if (next_cell > index && next_cell <= 9{
     95                            document.getElementById("block" + next_cell).innerHTML = percent_complete + "%";
     96                        }

     97                    }

     98                    if (index < 9{
     99                        setTimeout("pollServer()"2000);
    100                    }
     else {
    101                        document.getElementById("complete").innerHTML = "Complete!";
    102                        document.getElementById("go").disabled = false;
    103                    }

    104                }

    105            }

    106        }

    107        
    108        function processResult(percent_complete) {
    109            var ind;
    110            if (percent_complete.length == 1{
    111                ind = 1;
    112            }
     else if (percent_complete.length == 2{
    113                ind = percent_complete.substring(01);
    114            }
     else {
    115                ind = 9;
    116            }

    117            return ind;
    118        }

    119
    120        function checkDiv() {
    121            var progress_bar = document.getElementById("progressBar");
    122            if (progress_bar.style.visibility == "visible"{
    123                clearBar();
    124                document.getElementById("complete").innerHTML = "";
    125            }
     else {
    126                progress_bar.style.visibility = "visible"
    127            }

    128        }

    129        
    130        function clearBar() {
    131            for (var i = 1; i < 10; i++{
    132                var elem = document.getElementById("block" + i);
    133                elem.innerHTML = clear;
    134                elem.style.backgroundColor = "white";
    135            }

    136        }

    137    
    </script>
    138    </head>
    139    <body>
    140        <h1>Ajax Progress Bar Example</h1>
    141        Launch long-running process: <input type="button" value="Launch" id="go" onclick="go();" NAME="go">
    142        <p>
    143            <table align="center" ID="Table1">
    144                <tbody>
    145                    <tr>
    146                        <td>
    147                            <div id="progressBar" style="BORDER-RIGHT:black 2px solid;PADDING-RIGHT:2px;BORDER-TOP:black 2px solid;PADDING-LEFT:2px;VISIBILITY:hidden;PADDING-BOTTOM:2px;BORDER-LEFT:black 2px solid;PADDING-TOP:2px;BORDER-BOTTOM:black 2px solid">
    148                                <span id="block1">&nbsp;&nbsp;&nbsp;</span>
    149                                <span id="block2">&nbsp;&nbsp;&nbsp;</span>
    150                                <span id="block3">&nbsp;&nbsp;&nbsp;</span>
    151                                <span id="block4">&nbsp;&nbsp;&nbsp;</span>
    152                                <span id="block5">&nbsp;&nbsp;&nbsp;</span>
    153                                <span id="block6">&nbsp;&nbsp;&nbsp;</span>
    154                                <span id="block7">&nbsp;&nbsp;&nbsp;</span>
    155                                <span id="block8">&nbsp;&nbsp;&nbsp;</span>
    156                                <span id="block9">&nbsp;&nbsp;&nbsp;</span>
    157                            </div>
    158                        </td>
    159                    </tr>
    160                    <tr>
    161                        <td align="center" id="complete"><FONT face="宋体"></FONT></td>
    162                    </tr>
    163                </tbody>
    164            </table>
    165        </p>
    166    </body>
    167</html>
    168
  • 相关阅读:
    主成分分析法(PCA)答疑
    搜索引擎的高级用法
    Makefile 编写实例
    GCC常用命令
    一个进程最多能开多少个线程?
    归并排序
    选择排序(数组、链表)
    求连续子数组的最大和
    生产者-消费者问题(1)
    基于cmake编译安装MySQL-5.5
  • 原文地址:https://www.cnblogs.com/jeet/p/521418.html
Copyright © 2011-2022 走看看