从javascript调用web服务

从javascript调用web服务,javascript,asp.net,web-services,browser,Javascript,Asp.net,Web Services,Browser,我在ASP.NET中编写了web服务,它有以下地址: http://localhost/RouteGen/Service.asmx Web服务具有Web方法GetMessage,它不接受任何参数并返回字符串 web服务没问题,我从其他ASP.NET应用程序甚至Android应用程序调用它的方法 服务器代码: [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.Ba

我在ASP.NET中编写了web服务,它有以下地址:

http://localhost/RouteGen/Service.asmx
Web服务具有Web方法
GetMessage
,它不接受任何参数并返回字符串

web服务没问题,我从其他ASP.NET应用程序甚至Android应用程序调用它的方法

服务器代码:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
    [WebMethod]
    public string GetMessage() {
        return "Hello World";
    }
}
现在我需要从javascript调用web方法
GetMessage

html页面: (这个网页与Web服务代码没有联系,它完全是另一个项目!你可以认为它是用Win记事本写的)

还有这些功能:

function service_init()
{   
    body1.useService("http://localhost/RouteGen/Service.asmx?WSDL","TheService");   
    body1.TheService.callService("GetMessage");
}

function processResult(result)
{
    alert(result);
}
因此,我有:

1) 在IE中
processResult()
返回“未定义”

2) 在Chrome和FireFox中,它根本不起作用(useService未出现后的简单警报)

问题在哪里?如何让javascript正常地从不同的浏览器调用web方法?

在Aspx部分

添加ScriptManager标记,如下所示

        <asp:ScriptManager ID="ScriptManager1" runat="server">
                <Services>
                   <asp:ServiceReference  path="~/sample.asmx"/>
                </Services>
         </asp:ScriptManager>
<script language="javascript" type="text/javascript">

  function CalledOnAnyClientClickEvent()
  {
     var parameter1="dsfsfs"; 

     NameSpace1.WebService1.HelloWorld(parameter1,OnSucess,OnFail);
  }
   function OnSuccess(asd)
   {
      alert(asd);//result will contain the return parameter from web service
   }

   function OnFail(asd)
   {
      alert(asd);
   }
</script>

在JavaScript中,调用web服务(sample.asmx),如下所示:

        <asp:ScriptManager ID="ScriptManager1" runat="server">
                <Services>
                   <asp:ServiceReference  path="~/sample.asmx"/>
                </Services>
         </asp:ScriptManager>
<script language="javascript" type="text/javascript">

  function CalledOnAnyClientClickEvent()
  {
     var parameter1="dsfsfs"; 

     NameSpace1.WebService1.HelloWorld(parameter1,OnSucess,OnFail);
  }
   function OnSuccess(asd)
   {
      alert(asd);//result will contain the return parameter from web service
   }

   function OnFail(asd)
   {
      alert(asd);
   }
</script>

函数CalledOnAnyClientClickEvent()
{
var参数1=“dsfsfs”;
NameSpace1.WebService1.HelloWorld(参数1、onsuces、OnFail);
}
成功时的功能(asd)
{
警报(asd);//结果将包含来自web服务的返回参数
}
功能失效(asd)
{
警报(asd);
}
请参见下面的Asmx部分(sample.Asmx)

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.Services;
使用System.Web.Script.Serialization;
使用System.Web.Script.Services;
名称空间1
{
/// 
///WebService 1的摘要说明
/// 
[WebService(命名空间=”http://tempuri.org/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
//要允许使用ASP.NET AJAX从脚本调用此Web服务,请取消注释以下行。
[脚本服务]
公共类WebService 1:System.Web.Services.WebService
{
[网络方法]
公共字符串HelloWorld(字符串par1)
{
//你的逻辑在这里吗
返回“你好世界”;
}
}
}

希望这有助于

ASMX是一个SOAP web服务。SOAP是相对复杂的

将数据返回到浏览器的更好方法是使用REST。可以使用JQUERY使用REST服务

您可以构建使用REST并返回JSON结果的WCF服务


如果您的服务与您的网页不在同一台服务器上,则必须使用类似于JSONP的方法进行跨域调用。

NameSpace1.WebService1.HelloWorld(参数1,onsuces,OnFail)
代替了
useService
callService
方法?如何在javascript代码中使用Namespace1?这是另一个与web服务代码没有连接的html页面嘿,这就是为什么要指定具有web服务路径的脚本管理器。我已经实现了这一点,它对我起了作用…@Ilya Blokh,我又尝试了一次,效果非常好。我不知道为什么有人投票否决了它,没有任何评论。你在哪里写的javascript代码?它应该在asp.net服务器之后创建的html页面上,而不是在。你已经有了带有web方法的web服务,我需要用javascript写些东西来调用这个方法为什么
NameSpace1.WebService1.HelloWorld(参数1,onsuces,OnFail)有效?在网页的何处定义名称空间1?WCF非常好,特别是对于经过身份验证的web服务和关键数据。对于一个基本的CRUD web服务,我已经在ASP.NETMVC中构建了它,它的工作方式就像一个champ一样。@RockingsSixstring,您能告诉我我的答案有什么问题吗?这对我来说非常有效…@哈伦,我没有否决你的答案,也没有看它。我停止使用web表单,所以我不喜欢任何包含
runat=“server”
的东西。我并不是说这是错的,我只是没有看它,也没有投票。那么从javascript调用web方法呢?我不知道为什么有人投票否决了它,没有任何评论。不管怎样,我的答案都很完美。。。
          using System;
          using System.Collections.Generic;
          using System.Linq;
          using System.Web;
          using System.Web.Services;

          using System.Web.Script.Serialization;
          using System.Web.Script.Services;

          namespace NameSpace1
          {
            /// <summary>
            /// Summary description for WebService1
            /// </summary>
           [WebService(Namespace = "http://tempuri.org/")]
           [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]     
            [System.ComponentModel.ToolboxItem(false)]

           // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
           [ScriptService]

           public class WebService1 : System.Web.Services.WebService
           {

                  [WebMethod]
                   public string HelloWorld(string par1)
                   {
                        //do your logic here

                       return "Hello World";
                   }
            }
         }