Consuming ASP Web Service with jQuery

I found some other questions about this, but they didn't work for me :( So I'm posting my own question:

I made an ASP.NET webservice in mono. Code for this:

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";
        }
    }
}

      

I am trying to call this web service from a website using jQuery:

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);   
          }         
}   

      

When I run the page, I get a "0 error" warning. Kay, can you please give me some advice?

+3


source to share


3 answers


For the service to work, you need:

Add a link to your project System.Web.Extension

.

Add using System.Web.Script.Services;

ws to your source.

Add to

[ScriptService]

      

to your ws class.

Add to

    <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"/>

      

inside your web.config in a tag <httpHandlers>

.



If you are calling getCar()

with a button, click return false;

after the method call so that the click does not trigger a postback.

For example:

[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>

      

+1


source


Your service code is wrong. You will at least miss

[System.Web.Script.Services.ScriptService]

      

in your class ws

.



At http://www.tomot.de/en-us/article/8/asp.net/how-to-use-jquery-to-call-a-webservice-asmx-method I posted a sample that worked for me a few days ago.

Be aware that changing the return type from String to something else requires sending real json objects.

+1


source


So far I can see you are using the old asp.net 2.0 webservice. Why are you setting json as the post data type? I don't think it fits such a web service.

0


source







All Articles