I am using .Net framework 2.0 / jQuery to make an Ajax call to a 2.0 web service. No matter what I set the contentType to in the ajax call, the service always returns XML. I want it to return Json!
Here is the call:
$(document).ready(function() { $.ajax({ type: 'POST', url: 'DonationsService.asmx/GetDate', data: '{}', contentType: 'application/json; charset=utf-8', dataType: 'json', success: function(msg) { // Hide the fake progress indicator graphic. $('#RSSContent').removeClass('loading'); // Insert the returned HTML into the <div>. $('#RSSContent').html(msg.d); } }); });
Here is what the request header looks like in Fiddler:
POST /DonationsService.asmx/GetDate HTTP/1.1 x-requested-with: XMLHttpRequest Accept-Language: en-us Referer: http://localhost:1238/text.htm Accept: application/json, text/javascript, */* Content-Type: application/json; charset=utf-8 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; eMusic DLM/4; .NET CLR 2.0.50727) Host: localhost:1238 Content-Length: 2 Connection: Keep-Alive Pragma: no-cache
I have tried setting the contentType to ‘text/json’ and get the same results.
Here is the web service method:
<WebMethod()> _ Public Function GetDate() As String 'just playing around with Newtonsoft.Json Dim sb As New StringBuilder Dim sw As New IO.StringWriter(sb) Dim strOut As String = String.Empty Using jw As New JsonTextWriter(sw) With jw .WriteStartObject() .WritePropertyName('DateTime') .WriteValue(DateTime.Now.ToString) .WriteEndObject() End With strOut = sw.ToString End Using Return strOut End Function
and here is what it returns:
<?xml version='1.0' encoding='utf-8'?> <string xmlns='http://DMS.Webservices.org/'>{'DateTime':'11/13/2008 6:04:22 PM'}</string>
Does anyone know how to force the web service to return Json when I ask for Json?
Please don’t tell me to upgrade to .Net Framework 3.5 or anything like that (I’m not that stupid). I need a 2.0 solution.
It’s no problem to return JSON from ASMX services in ASP.NET 2.0. You just need the ASP.NET AJAX Extensions installed.
Do be sure to add the [ScriptService] decoration to your web service. That’s what instructs the server side portion of the ASP.NET AJAX framework to return JSON for a properly formed request.
Also, you’ll need to drop the ‘.d’ from ‘msg.d’ in my example, if you’re using it with 2.0. The ‘.d’ is a security feature that came with 3.5.