页面中的脚本如下:function btnInvoke_onclick()
{
    var theName = document.getElementById("tbName").value;
    SimpleWebService.SayHello(theName, onSayHelloSucceeded);//此处出错。
}function onSayHelloSucceeded( result )
{
    document.getElementById("result").innerHtml = result;
}
aspx页面文件:<from id="form1" runat="server">
    <asp:ScriptManager ID="sm" EnablePateMethods="true" runat="server">
      <Service>
        <asp:ServiceReference Path="Services/SimpleWebService.asmx" />
      </Service>
    </asp:ScriptManager>
    <div>
    <input id="tbName" type="text" />
    <input id="btnInvoke" type="button" value="Say Hello" onclick="return btnInvoke_onclick()
" />
    <div id="result" ></div> 
    <div>
</from>
SimpleWebService.asmx文件中的内容:......
using System.Web.Script.Service;
......namespace WebApplication1
{
    ....
    ....
    [ScriptService]
    public class SimpleWebService : System.Web.Services.WebService
   {
        [WebMethod]
        public string SayHello( string name )
        {
             return string.Format( "Hello {0}!", name );
        }
   } 
}
出现的错误是:
Microsoft JScript 运行时错误:‘SimpleWebService’未定义。我在网上找了一些说法:
1. 路径问题:该webservice文件时建立在WebApplication1下的,与页面在同一个文件夹下。
2. 添加命名空间,由于该webservice文件时建立在WebApplication1下的,因此命名空间与CS文件的命名空间是一致的,如果硬要写成:WebApplication1.SimpleWebService.SayHello(theName, onSayHelloSucceeded);
 
错误就是WebApplication1未定义。该程序是从网上的某个博客中找到的,据博主所说,内容出自“APS.NET AJAX 程序设计”。请教怎么处理,谢谢!

解决方案 »

  1.   

    ScriptManager不是很好的东西使用jQuery 吧,简单jQuery Ajax 调用 WebService 返回数据表(DataTable)的方法。HTML 代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title>jQuery Ajax 调用 WebService 返回数据表(DataTable)的方法。</title>
      <script type="text/javascript" src="jquery-1.5.js"></script>
      <script type="text/javascript">
        function ParseDate(jsonDate) {
          var date = new Date(parseInt(jsonDate.substr(6)));
          return date.toLocaleString();
        }
        function GetData() {
          $.ajax({
            type: "post", //注意这里是 post
            url: "WebService.asmx/GetDataTable",
            data: "{\"id\":\"8888\"}",
            contentType: "application/json;charset=utf-8", //提交数据的方法格式
            dataType: "json", //返回数据的格式
            success: function (result) {
              //你可以 alert(result.d)看数据返回的格式
              data = jQuery.parseJSON(result.d);
              t = "<table border='1'>";
              $.each(data, function (i, item) {
                t += "<tr>";
                t += "<td>" + item.UserId + "</td>";
                t += "<td>" + item.Name + "</td>";
                t += "<td>" + item.Count + "</td>";
                t += "<td>" + ParseDate(item.CreateDate)+ "</td>";
                t += "</tr>";
              })
              t += "</table>";
              $("#result").html(t);
            },
            error: function (result) { alert(result.responseText); }
          });
        }
        window.onload = GetData;  </script>
    </head>
    <body>
      <div id="result"></div>
    </body>
    </html>后台的WebService代码:
    WebService.asmx 代码
    <%@ WebService Language="C#" Class="WebService" %>using System;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using System.Web.Script.Serialization;
    using System.Collections;
    using System.Collections.Generic;
    using System.Data;
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    //若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    [System.Web.Script.Services.ScriptService]
    public class WebService : System.Web.Services.WebService
    {  [WebMethod]
      public String GetDataTable(int id)
      {
        System.Data.DataTable dt = new System.Data.DataTable();
        System.Data.DataRow dr;
        dt.Columns.Add(new System.Data.DataColumn("UserId", typeof(System.Int32)));
        dt.Columns.Add(new System.Data.DataColumn("Name", typeof(System.String)));
        dt.Columns.Add(new System.Data.DataColumn("Count", typeof(System.Double)));
        dt.Columns.Add(new System.Data.DataColumn("CreateDate", typeof(System.DateTime)));
        dt.PrimaryKey = new System.Data.DataColumn[] { dt.Columns["UserId"] };
        System.Random rd = new System.Random();
        for (int i = 0; i <6; i++)
        {
          dr = dt.NewRow();
          dr[0] = i + i;
          dr[1] = "【孟子E章】" + id.ToString();
          dr[2] = System.Math.Ceiling(rd.NextDouble() * 1000);
          dr[3] = DateTime.Now.AddDays(rd.Next(100) - rd.Next(100));
          dt.Rows.Add(dr);
        }
        
        System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
        List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
        Dictionary<string, object> row = null;    foreach (DataRow dr1 in dt.Rows)
        {
          row = new Dictionary<string, object>();
          foreach (DataColumn col in dt.Columns)
          {
            row.Add(col.ColumnName, dr1[col]);
          }
          rows.Add(row);
        }
        return serializer.Serialize(rows);
      }
    }
      

  2.   

    非常感谢,我先下点jQuery的资料看看。
    不过,我还是想知道我的程序错在哪里了?
      

  3.   

    在web service中写成这样试试[WebService(Namespace = "http://tempuri.org/")]
    [System.Web.Script.Services.ScriptService]
    public class SimpleWebService : System.Web.Services.WebService然后再用你原来的方法试试,看会不会出错
      

  4.   

    Services/SimpleWebService.asmx 这里为什么会有个目录Services呢?
      

  5.   

    不知道他这个是这么弄的,多了个Services文件夹,开始我还以为是所有的WebService都会有的呢,可是又没有看见哪里有关于这个文件夹的说明,搞得好奇怪。另外,我是在同一个工程里建的WebService类和页面部分,我把Services部分去掉,还是出错。