这是网页的源码:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
    
 <script type="text/javascript">
      var g_tbname=null;
      var g_btnHello=null;
      var g_lbmsg=null;
      function pageload()
      {
        g_tbname=new Sys.Preview.UI.TextBox($get('tbName'));
        g_tbname.initialize();
        
        g_btnHello=new Sys.Preview.UI.Button($get('btnHello'));
        g_btnHello.add_click(GetHelloWordMessage);
        g_btnHello.initialize();
        
        g_lbmsg=new Sys.Preview.UI.Label($get('lbMessage'));
        g_lbmsg.initialize();
      }
      
      function GetHelloWordMessage()
      {
         HelloWorldService.GetHelloWorldString(g_tbname.get_text(),cb_getHelloworld);
      }
      
      function cb_getHelloworld(result)
      {
         g_lbmsg.set_text(result);
      }
 </script>
</head>
<body onload="javascript:pageload();">
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" >
            <Services>
                <asp:ServiceReference Path="HelloWorldService.asmx" />
            </Services>
            <Scripts>
                <asp:ScriptReference Assembly="Microsoft.Web.Preview" Name="PreviewScript.js" />
            </Scripts>
        </asp:ScriptManager>
        <div>
            <label for="tbName">Your Name</label>
            <input id="tbName"  type="text" />
            <input id="btnHello" type="button" value="Say Hello" />
        </div>
        <div id="lbMessage"></div>
    </form>
</body>
</html>其中“ScriptManager”控件是Ajax的核心控件,他引用了HelloWorldService服务,该服务返回一句话。但是在我的调试当中,当输入用户名,点击按钮后,网页出现错误提示:HelloWorldService未定义。
我觉得一方面ScriptManager在服务器端运行,然后将客户端Javascript发送给客户端,应该会把HelloWorldService的执行发送到客户端;另一方面javascript在客户端执行,应该检查类HelloWorldService,而类没有声明,显然不合理。所以现在比较晕,不知如何解决,从而使得AJAX下Javascript能够调用Web Service。要说明的是:Web Service我是测试过的,没有问题的。最后谢谢大侠指导

解决方案 »

  1.   

    楼主所说的例子,我也看了,也试验过,是能正常运行的。你在实现的过程中出现了错误,可能有细节方面出了问题,你再重现把例子做一遍,应该没问题的。我对ajax的浅显理解:ScriptManager是为客户端提供了一些js的引用
    当用户点击页面的按钮,会根据这些js的判断,是使用普通的postback或者直接回传部分数据给服务器,然后服务器做出处理,根据来源不同,给不同的回复(不刷新回传的话,只回传所需要的数据),数据到达客户端,还会使用js来改变updatepanel中的资料。
      

  2.   

    都ScriptManager了还写什么JS代码呢?
      

  3.   


    webservice那端
    [System.Web.Services.WebMethod]
        [System.Web.Script.Services.ScriptMethod]
      

  4.   

    楼上好,WebService就是按照你说的写的,也测试过,没有问题。To yusongkun(九道轮回) :是啊!我觉得也没问题,可是触发Click事件时,客户端脚本认为HelloWorldService未定义。我觉得是不是ScriptManager没有真正引用到Web Service.?
      

  5.   

    这是MS 
    http://ajax.asp.net
    下面是property.js+ws.js调用webservice
    二种方式都是ajax调用webservice
      

  6.   


    http://www.ibm.com/developerworks/cn/webservices/ws-wsajax2/index.html
    http://ajax.asp.net
      

  7.   

    还是没看出来为什么说HelloWorldService未定义?郁闷啊!搁了好久的问题
      

  8.   

    Ajax鱼龙混杂。你可不能把根本不是asp.net ajax的其它ajax流派的编程方法混到那里。