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?
source to share
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>
source to share
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.
source to share