使用jQuery使用ASP Web服务

时间:2012-03-20 15:23:45

标签: web-services jquery mono

我发现了一些其他问题,但它们对我不起作用:(所以我发表了自己的问题:

我已经在单声道中创建了一个ASP.NET Web服务。它的代码是:

using System;
using System.Web;
using System.Web.Services;

namespace testWebservice
{
    public class ws : System.Web.Services.WebService
    {
        public ws() {

        }
        [WebMethod]
        public String sendCar()
        {
            return "44.435006,26.102314";
        }
    }
}

我正在尝试使用jQuery从网站上调用此Web服务:

function getCar()
{
    $.ajax( {
    type:'POST',
    url:'http://127.0.0.1:8080/ws.asmx/sendCar',
    contentType: "application/json; charset=utf-8",  
    data: "{}",
    dataType: "json",
    success:function(msg) {
      AjaxSucceeded(msg);  
    },  
    error: AjaxFailed
    })   
    function AjaxSucceeded(result) {   
              alert(result.d);   
          }  
    function AjaxFailed(result) {   
              alert(result.status + ' ' + result.statusText);   
          }         
}   

当我运行该页面时,我收到一条警告“0错误”。 Cay有人给我一些建议吗?

3 个答案:

答案 0 :(得分:1)

您服务中的代码不正确。

你至少错过了
[System.Web.Script.Services.ScriptService]
您的班级ws上的

属性。

http://www.tomot.de/en-us/article/8/asp.net/how-to-use-jquery-to-call-a-webservice-asmx-method我发布了几天前为我工作的样本。

请注意,将返回类型从String更改为其他内容,需要您发送真正的json对象。

答案 1 :(得分:1)

要使服务工作,您需要:

向您的项目添加对System.Web.Extension

的引用

在您的ws来源中添加using System.Web.Script.Services;

添加:

[ScriptService]

到你的ws班。

添加:

    <remove verb="*" path="*.asmx"/>
    <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

<httpHandlers>标记下的web.config中。

如果您从按钮调用getCar(),请在方法调用后添加return false;,以便点击不会导致回发。

例如:

[Default.aspx的]

<%@ Page Language="C#" Inherits="testWebservice.Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head runat="server">
    <title>jQuery Web Service call from Mono using JSON</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript">
        function getCar()
        {
            $.ajax( {
            type:'POST',
            url:'http://127.0.0.1:8080/ws.asmx/sendCar',
            contentType: "application/json; charset=utf-8",  
            data: "{}",
            dataType: "json",
            success:function(msg) {
              AjaxSucceeded(msg);  
            },  
            error: AjaxFailed
            })   
            function AjaxSucceeded(result) {   
                      alert(result.d);   
                  }  
            function AjaxFailed(result) {   
                      alert(result.status + ' ' + result.statusText);   
                  } 
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:Button runat="server" id="btnTest" Text="Call WebService" OnClientClick="getCar(); return false;" />
    </form>
</body>
</html>

[ws.asmx.cs]

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

namespace testWebservice
{
    [ScriptService]
    public class ws : System.Web.Services.WebService
    {
        public ws() {

        }
        [WebMethod]
        public String sendCar()
        {
            return "44.435006,26.102314";
        }
    }
}

[web.config中]

<?xml version="1.0"?>
<!--
Web.config file for testWebservice.

The settings that can be used in this file are documented at 
http://www.mono-project.com/Config_system.web and 
http://msdn2.microsoft.com/en-us/library/b5ysx397.aspx
-->
<configuration>
  <system.web>
    <compilation defaultLanguage="C#" debug="true">
      <assemblies>
        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </assemblies>
    </compilation>
    <customErrors mode="RemoteOnly">
    </customErrors>
    <authentication mode="None">
    </authentication>
    <authorization>
      <allow users="*" />
    </authorization>
    <httpHandlers>
        <remove verb="*" path="*.asmx"/>
        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </httpHandlers>
    <trace enabled="false" localOnly="true" pageOutput="false" requestLimit="10" traceMode="SortByTime" />
    <sessionState mode="InProc" cookieless="false" timeout="20" />
    <globalization requestEncoding="utf-8" responseEncoding="utf-8" />
    <pages>
    </pages>
  </system.web>
</configuration>

答案 2 :(得分:0)

只要我能看到,你就是使用旧的asp.net 2.0风格的webservice。为什么要将json设置为发送的数据类型?我不认为这适合那种网络服务