用AJAXEnabledWebApplication的形式开发ajax项目时,调用webservice时,在客户端老是报javascript的错误,说webservice未定义。我弄了一天。MD,终于知道是什么原因了。现在写出来,希望能帮助其他人。
当我们用website的形式开发时,webservice的代码是放在app_code文件夹里面。这个文件夹是比较特别的,在这里这个文件夹里面的类,在外面是可以直接用的。
但是用WebApplication开发时。由于采用了不同的形式进行代码管理。所以多有个namespace的属性。这个时候问题就出现。一模一样的代码在website里面调试成功的。但是到WebApplication死活不能过去。(而且网上好多的代码多是写成那样啊。真是害人啊)为什么过不去呢。主要是因为我们在调用webservice时,少了namespace的这个属性。导致根本找不到webservice。现在将代码贴出:

webstie 形式:

//webservice 代码
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Script.Services;  //ajax请求webservice

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[ScriptService] //ajax请求webservice
public class WebService : System.Web.Services.WebService {

    public WebService () {

        //如果使用设计的组件,请取消注释以下行
        //InitializeComponent();
    }

    [WebMethod]
    public string HelloWorld() {
        return "Hello World";
    }
}
当我们在页面调用这个webservice时
//脚本
 <script type="text/javascript">
      function Test()
        {
           requestSimpleService = WebService1.HelloWorld();
           alert(requestSimpleService ) 
        }
       
     
    </script>
//页面
  <form />

如果没有问题的话,肯定会出现HelloWorld方法的返回值的。

WebApplication 形式:
//webservice代码

using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Web.Script.Services;

namespace AJAXWebApp  //就是这里,在客户端调用时,一定要写namespace
{
  
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    [ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }
    }
}

当我们在页面调用这个webservice时
//脚本
 <script type="text/javascript">
      function Test()
        {
           requestSimpleService = AJAXWebApp.WebService1.HelloWorld();  //这个地方与webstie调用是不同的。
           alert(requestSimpleService ) 
        }
       
     
    </script>
//页面
  <form />
            </Services>
</asp:ScriptManager>
</form>

想要使用ASP.NET AJAX在客户端JavaScript中异步调用服务器端Web Service,我们需要:

  1. 为Web Service类或需要暴露给客户端的Web Service方法添加[ScriptService]属性;
  2. 为Web Service中需要暴露给客户端的方法添加[WebMethod]属性;
  3. 在页面中的ScriptManager控件中添加对该Web Service的引用;
  4. 在客户端使用如下JavaScript语法调用该Web Service:
    [NameSpace].[ClassName].[MethodName](param1, param2 ......, callbackFunction)   [重要]
  5. 为客户端异步调用指定回调函数,在回调函数中接收返回值并进一步处理。

相关文章: